标签: subquery

GROUP_CONCAT 与 ORDER BY ,但结果未排序

以下查询工作正常

SELECT
*,
(SELECT
GROUP_CONCAT(url SEPARATOR '$$' )
FROM project_photos
WHERE project_id = projects.id
ORDER BY priority) AS images
FROM projects
WHERE catID = 2
LIMIT 0,5
Run Code Online (Sandbox Code Playgroud)

但该images列并未按优先顺序排列。我无法理解为什么会发生这种情况

表项目的结构

CREATE TABLE `projects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catID` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`description` varchar(400) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`tags` varchar(255) DEFAULT NULL,
`featured` varchar(3) NOT NULL DEFAULT 'No',
`featured_url` varchar(255) DEFAULT NULL,
`order` int(11) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY …
Run Code Online (Sandbox Code Playgroud)

mysql order-by subquery group-concatenation

2
推荐指数
1
解决办法
1万
查看次数

Postgresql 嵌套 row_to_json 不起作用

如果我使用 postgresql 9.2,这可能不会成为问题,但是我(还)无法从 9.1 升级,并且我正在使用 9.1 的 json 数据类型扩展。我正在尝试实现如下所示的 json 对象:

[
  { "type": "add"
    , "id":"285947086237736960"
    , "version" : 1
    , "lang":"en"
    ,"fields":  {
        "id" : "285947086237736960"
        , "created_at":"2013-01-01"
        , "content":"bla bla blah LOL ROFL"
    }
  }, ...
]
Run Code Online (Sandbox Code Playgroud)

嵌套的“fields”属性来自名为“tweets”的数据库表。两个 id 来自同一个表。但是,类型、版本、语言始终相同。我查看了/sf/ask/925899971/的建议,其中提到使用别名子查询表达式。这根本不起作用,我仍然得到 f1、f2 等。使用 row_to_json 创建 JSON 时将名称设置为属性的建议适用于单个级别,但我无法让它适用于嵌套“字段” “ 属性。

据我所知,这只适用于类似于以下的 with 语句:

with tweets(type, id) as ( 
    select 'add' as type, tweets.id from tweets 
) select row_to_json(tweets) from tweets;
Run Code Online (Sandbox Code Playgroud)

但是,如何获得嵌套的“字段”?任何帮助是极大的赞赏!

postgresql subquery postgresql-9.1

2
推荐指数
1
解决办法
4167
查看次数

相关子查询以查找大于状态平均值的总数

我有表 Vendors (VendorName, VendorState,....) 和 Invoices (InvoiceID, InvoiceTotal,...)。我想获得大于平均状态 InvoiceTotal 的发票(作为 InvoiceId)。

我知道我首先找到每个州的平均总数:

SELECT  VendorState, Avg(InvoiceTotal) AS AvgStateInvoice
from Invoices I join Vendors V on V.VendorID= I.VendorID 
group by VendorState
Run Code Online (Sandbox Code Playgroud)

所以我现在有按州列出的平均 InvoiceTotal 列表。现在我需要弄清楚:

如何进行外部查询以选择那些大于州平均水平的发票,这就是我迷路的地方,因为我不记得进行比较的语法。我想它会是这样的:

SELECT InvoiceId from Invoices where InvoiceTotal > .....?
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

sql-server subquery sql-server-2012

2
推荐指数
1
解决办法
588
查看次数

在 mySql 中搜索带有空格的文本与 Query 匹配

我想用 [space] (Ascii 32) 作为其中的一部分在 mysql DB 中搜索文本。但我没有得到正确的结果。

我的 MySql 查询是:

SELECT count(id) as total
    , MIN(product_price) as min_price
    , MAX(product_price) as max_price 
FROM `products_details` 
WHERE subcat_id = 1026 
    AND MATCH(alternate_name, product_desc, keywords)
    AGAINST ('+moto +g +plus +(>mobile <mobiles)'; IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

我有以下问题:

AGAINST ('+moto +g +plus +(>mobile <mobiles)'

我想moto g plus使用上面的查询搜索字符串移动。我想在g. 例如,moto "SPACE"g"SPACE"

我尝试了以下 2 个解决方案,但它不起作用。

[[:空间:]]

AGAINST ('+moto +[[:space:]]g[[:space:]] +plus +(>mobile <mobiles)'

AGAINST ('+moto +\\ g\\ +plus +(>mobile <mobiles)' ==> 我在此查询中的 …

mysql subquery php mysql-5.6

2
推荐指数
1
解决办法
6138
查看次数

比较行值

我是 SQL 新手,希望得到一些帮助。

这是我的表:

ID  Name  Number  Src_Call_Leg  Dest_Call_Leg
--  ----  ------  ------------  -------------
1   John  5555    100           1000
2   John  5555    100           102
Run Code Online (Sandbox Code Playgroud)

该表存储呼叫记录。当呼叫 5555 时,系统首先接受源呼叫支路 100 和目的地呼叫支路 1000 以及最终目的地呼叫支路 102,然后由 John 应答。源调用段在整个过程中没有变化。

我想要的是仅显示具有名称、号码、源呼叫支路和最终目的地呼叫支路的数据,以记录临时呼叫支路以 1000 开头的记录。

我尝试这样做,但没有用。这是我的尝试:

select
  tb.name,
  tb.number,
  tb.Src_Call,
  tb.Dest_Call_leg
from
  table tb
where
  tb.Src_Call_Leg IN (
    select
      tb1.Src_Call_Leg
    from
      table tb1
    where
      tb1.Dest_Call_Leg like '1000%'
  );
Run Code Online (Sandbox Code Playgroud)

我知道我在做一些非常愚蠢的事情,如果有人能指出这一点,我将不胜感激。

subquery

2
推荐指数
1
解决办法
70
查看次数

同一张表的相关子查询,只有一个别名

我有这样的查询

SELECT *
FROM my_table
WHERE ... AND id IN (SELECT t2.id
                     FROM my_table t2
                     WHERE id = t2.id AND ... );
Run Code Online (Sandbox Code Playgroud)

我知道在这个例子中我可以组合这两个WHERE子句并且不使用子查询,但这不是重点。

此查询在我使用的 DBMS(SQL Anywhere 16)上完美运行,但我想知道id在子查询中my_table.id从主查询引用的事实是否是标准行为,或者我是否只是幸运。

链接或参考 RFC 或任何官方文件表示赞赏:)

subquery sybase-sql-anywhere

2
推荐指数
1
解决办法
2万
查看次数

相关子查询:解析不明确的名称

假设我有 2 个共享一些列名的表。在这种情况下,主键是两个都被调用id

CREATE TABLE artists(
    id int primary key,
    name text,
--  …,

);
CREATE TABLE paintings(
    id int primary key,
    artistid references artists(id),
    title text,
--  …,
);
Run Code Online (Sandbox Code Playgroud)

注意: 我知道有一些反对将主键称为通用名称id的论据,例如,但让我们假设,为了争论,它超出了我的控制范围。无论如何,就这个问题而言,它可能是任何其他列。

假设我现在有一个粗心编写的SELECT语句,它试图使用相关子查询从引用的表中提取数据:

SELECT
    id, title,
    (SELECT name FROM artists WHERE artistid=id) as artist
FROM paintings;
Run Code Online (Sandbox Code Playgroud)

显然,内部WHERE子句可以更好地写成WHERE paintings.artistid=artists.id. 但是我已经摆脱了它并且它有效。如果我将WHERE子句写为id=artistid.

我知道这不是最好的方法,但我更惊讶的是它理解了我的意图,这不是我们对 SQL 的期望。

问题是:SQL 如何解释相关子查询中的歧义列?

subquery

2
推荐指数
1
解决办法
989
查看次数

多个子查询中的复杂连接

很抱歉一直打扰你们,但 SQL 对我来说仍然是新的。我有这些表:Store_location、Product、Sizes、Sells、Available_in、Offers 和 Currency。目标是能够运行一个包含多个子查询的查询(需要WHERE子句),该查询将仅返回在所有商店位置销售的产品,而不返回其他任何内容。它还必须是可扩展的,这样如果任何商店打开或关闭,代码就不需要更改。我有这些杂谈让我开始,但我不知道从哪里开始:下面的第一个 select 语句是查询成功时需要显示的内容。SELECT Store_location.store_name,Product.product_name,Sizes.size_option, COUNT(store_location.store_id) AS store_count

JOIN Sells ON Sells.store_location_id = Store_location.store_location_id
JOIN Product ON Product.product_id = Sells.product_id


JOIN ON Available_in.product_id = Product.product_id
JOIN ON Available_in.sizes_id = Sizes.sizes_id
Run Code Online (Sandbox Code Playgroud)

我试图完成连接以显示我需要使用的表在哪里有外键约束。如果您需要任何其他信息,我可以提供。我添加了一个链接,显示所有相关表格的内容。我知道我需要在 WHERE 语句中嵌入至少一个子查询,但不确定在那里放什么。我知道有很多信息需要回顾,我理解如果没有人有时间提供帮助,但任何指导都将不胜感激。

我意识到这是一个迟到的请求,但如果有人能帮助我在这方面也使用EXISTS,我将不胜感激。

join sql-server subquery count where

2
推荐指数
1
解决办法
8182
查看次数

使用带有子查询的重复数据删除

我继承了一个缺乏唯一约束的数据库,因此数据被/被复制。我现在正在尝试删除重复的记录,然后添加一个约束来阻止这一点。

我有这个查询:

SELECT count(*) as dacount, substr(group_concat(id), (locate(',', group_concat(id))+ 1))
FROM `game`
group by matchid, ordinal
having dacount > 1
order by dacount desc
Run Code Online (Sandbox Code Playgroud)

这正确地给了id我需要删除的行的s。但问题是,DELETE由于dacountwithhaving参数,我不能将其用作子查询。有没有另一种方法可以做到这一点?

这是我的计划:

DELETE FROM game WHERE id IN (SELECT count(*) as dacount, substr(group_concat(id), (locate(',', group_concat(id))+ 1))
FROM `game`
GROUP BY matchid, ordinal
HAVING dacount > 1)
Run Code Online (Sandbox Code Playgroud)

mysql duplication subquery functions

2
推荐指数
1
解决办法
921
查看次数

在 Postgres 触发器的 FROM 子句中使用 NEW?

我正在尝试编写 Postgres 触发器以在插入或更新新行之前取消嵌套数组字段。例如

SELECT
unnest(something)
FROM NEW
Run Code Online (Sandbox Code Playgroud)

但是,这似乎会导致错误:

关系“新”不存在

如何使用触发器函数内的 NEW 行,以允许我取消嵌套数组字段以进行进一步处理?

创建表语句

以下是表结构的示例:

CREATE TABLE parent_table (
    id uuid NOT NULL,
    jsonb_array_field jsonb[] NOT NULL DEFAULT '{}'::jsonb[],
    CONSTRAINT "parent_table_pkey" PRIMARY KEY (id),
);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE many_to_one_table (
  id serial primary key,
  parent_table_id uuid references parent_table(id),
  subfield_a text,
  subfield_a text
);
Run Code Online (Sandbox Code Playgroud)

触发功能

下面是 TRIGGER 函数的本质:

CREATE OR REPLACE FUNCTION unnest_and_normalize_json() RETURNS TRIGGER AS 
$body$
begin
    if NEW.jsonb_array_field is null then
        raise exception 'jsonb_array_field is null';
    else
        insert into 
            many_to_one_table(subfield_a, subfield_b) …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger subquery postgresql-9.4

2
推荐指数
1
解决办法
2488
查看次数