gpt4 book ai didi

sql - 如果左联接返回任何行,则返回 '1'的更好方法?

转载 作者:行者123 更新时间:2023-12-04 13:35:20 26 4
gpt4 key购买 nike

我有三个表,“A”,“B”和“C”。我对“A”和“B”有疑问,但是我想添加一个字段,该字段告诉我是否有一个或多个(我不在乎有多少个)“C”外键为“A”。

这是我所拥有的:

SELECT    A.A_id, A.col_2, col_3, B.col_2, A.col_4
count(C.id) as C_count
FROM A
JOIN B ON (A.B_id = B.B_id)
LEFT JOIN C ON (A.A_id = C.A_id)
WHERE A.A_id = ?
GROUP BY A.A_id, A.col_2, col_3, B.col_2, A.col_4
ORDER BY CASE WHEN A.col_2 = ?
THEN 0
ELSE 1
END, col_3;

效率似乎有点低下,这不仅是因为我必须在 GROUP BY中列出所有这些字段,而且还因为我要统计的是,我真正想要的是至少存在一个匹配项。这可以改善吗?

最佳答案

将Exists与子查询结合使用...

 Select A.A_id, A.col_2, col_3, 
B.col_2, A.col_4,
Case When Exists (Select * From C
Where A_id = A.A_id)
Then 1 Else 0 End As C_Exists
From A Join B
On (A.B_id = B.B_id)
Where A.A_id = ?
Order By Case When A.col_2 = ?
Then 0 Else 1 End, col_3;

关于sql - 如果左联接返回任何行,则返回 '1'的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com