以下查询工作正常
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) 如果我使用 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)
但是,如何获得嵌套的“字段”?任何帮助是极大的赞赏!
我有表 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)
有什么想法吗?
我想用 [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)'==> 我在此查询中的 …
我是 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)
我知道我在做一些非常愚蠢的事情,如果有人能指出这一点,我将不胜感激。
我有这样的查询
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 或任何官方文件表示赞赏:)
假设我有 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 如何解释相关子查询中的歧义列?
很抱歉一直打扰你们,但 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,我将不胜感激。
我继承了一个缺乏唯一约束的数据库,因此数据被/被复制。我现在正在尝试删除重复的记录,然后添加一个约束来阻止这一点。
我有这个查询:
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) 我正在尝试编写 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) subquery ×10
mysql ×3
postgresql ×2
sql-server ×2
count ×1
duplication ×1
functions ×1
join ×1
mysql-5.6 ×1
order-by ×1
php ×1
trigger ×1
where ×1