两张桌子:
prefix ( id, value )
---------------------
1 'hello'
2 'good afternoon'
3 'good night'
suffix ( id, value )
---------------------
1 'world'
3 'world'
我想得到
表prefix
中的全部可以通过suffix
id
上加入
结果应如下所示:
prefix.id prefix.value
--------------------------
1 'hello'
3 'good night'
好吧 - 到目前为止很容易......
但如果表格后缀为空,我想要表格prefix
中的所有内容
没有子选择/ ctes或if....
以及一个查询,满足这两个条件!
是否有任何技巧可以通过一些神奇的条款或其他棘手的东西来完成?
答案 0 :(得分:3)
嗯,是的一种方式,但我同意其他人的观点,即你的要求没有(实际)意义。
无论如何,你走了:
加入suffix
表两次(每次加入左连接)。一个连接位于id
列,另一个连接处于始终正确的状态。
将结果分组到输出中所需的prefix
列以及第一个suffix
实例的至少一个不可为空的列。
在HAVING子句中,设置第一个suffix
列不为null或第二个suffix
实例中非可空列的值数为0的条件。显然,每个组都有相同的行数,即每个prefix
行的计数都相同。)
这是查询:
SELECT prefix.id, prefix.value
FROM prefix
LEFT JOIN suffix ON prefix.id = suffix.id
LEFT JOIN suffix AS test ON 1=1
GROUP BY prefix.id, prefix.value, suffix.id
HAVING suffix.id IS NOT NULL OR COUNT(test.id) = 0;
还有一个演示at SQL Fiddle。
答案 1 :(得分:2)
您需要OR
和NOT EXISTS
:
SELECT
prefix.id, prefix.value
FROM
prefix
WHERE
EXISTS(SELECT 1 from suffix WHERE prefix.id=suffix.id)
OR NOT EXISTS(SELECT 1 FROM suffix)
答案 2 :(得分:0)
我猜答案是:不,你不能!
或者你可以:不,你不应该。