【发布时间】:2019-08-03 00:11:26
【问题描述】:
我想在连接多个表后根据特定条件检索两列的单行。用例子来解释它,我有这个:
SELECT c.column1, c.column2, d.column3, d.column4
FROM table1 a
JOIN table2 b ON a.id=b.id
JOIN table3 c ON b.tabid = c.tabid
LEFT JOIN table4 d ON c.pmid=d.pmid
WHERE a.id = @id
如果 column1 和 column2 不为 NULL,我希望将其中两个检索为
SELECT c.column1, c.column2
FROM table1 a
JOIN table2 b ON a.id=b.id
JOIN table3 c ON b.tabid = c.tabid
LEFT JOIN table4 d ON c.pmid=d.pmid
WHERE a.id = @id
否则,我想拥有
SELECT d.column3, d.column4
FROM table1 a
JOIN table2 b ON a.id=b.id
JOIN table3 c ON b.tabid = c.tabid
LEFT JOIN table4 d ON c.pmid=d.pmid
WHERE a.id = @id
我将使用带有 COUNT 函数的 IF 子句首先单独查看列是否为空,然后使用普通的 SELECT 语句进行检索。但是从同一个表中读取 3 次将是三重工作(检查每列的计数是否 > 0;如果两者都为真,则从这些列中进行选择)。我相信它可以更好地增强。
我还考虑使用两个单独的公用表表达式来与 CASE 一起使用。但最终出现语法错误。
任何指导将不胜感激。谢谢!
【问题讨论】:
-
您使用的是什么关系型数据库?可以使用
IsNull()或COALESCE()函数吗? -
SQL 2014。我可以使用它。但我必须检查两列是否都不是 NULL。
-
如果其中 1 个为空,那是什么?
-
如果c.column1、c.column2之一为null,我就取d.column3、d.column3。
标签: sql sql-server tsql select sql-server-2014