我希望以第一个条件通过的方式实现条件连接语句,然后根据第一个条件选择记录,否则转到第二个连接条件。
Select
col1, Col2, Col3, TableB.Column1, TableB.Column2
from
TableA
JOIN
TableB ON (TableA.col1 = TableB.Column1
TableA.col2 = TableB.Column2
TableA.col3 = TableB.Column3)
OR //second OR
(
TableA.col1 = TableB.Column1
TableA.col2 = TableB.Column2
TableB.Column3 IS NULL
)
OR //Third OR
(
TableA.col1 = TableB.Column1
TableA.col3 = TableB.Column3
TableB.Column2 IS NULL
)
如果条件一通过,查询不应该进入第二个OR条件,我应该只输出一行作为输出。
答案 0 :(得分:0)
如果我已正确理解您的要求,那么您正在寻找以下查询:
SELECT col1, Col2, Col3
FROM (
SELECT col1, Col2, Col3,
RANK() OVER (ORDER BY seqNo) AS rn
FROM (
-- Query no. 1
SELECT col1, Col2, Col3, 1 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableA.col2 = TableB.Column2
AND TableA.col3 = TableB.Column3
UNION ALL
-- Query no. 2
SELECT col1, Col2, Col3, 2 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableA.col2 = TableB.Column2
AND TableB.Column3 IS NULL
UNION ALL
-- Query no. 3
SELECT col1, Col2, Col3, 3 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableB.Column2 IS NULL
AND TableA.col3 = TableB.Column3 ) AS t
) AS s
WHERE s.rn = 1
以上内容将返回三个独立查询的第一个非空集UNION
。
这意味着如果查询号码。 1返回一个非空集,然后返回此集的行,只返回这些。否则查询行数没有。 2返回,等等。
答案 1 :(得分:0)
如果我已正确理解要求,以下内容应返回所需的结果:
SELECT col1, Col2, Col3, column1, column2
FROM (
SELECT col1, Col2, Col3, column1, column2,
RANK() OVER (PARTITION BY col1, Col2, Col3 ORDER BY seqNo) AS rn
FROM (
-- Query no. 1
SELECT col1, Col2, Col3, column1, column2, 1 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableA.col2 = TableB.Column2
AND TableA.col3 = TableB.Column3
UNION ALL
-- Query no. 2
SELECT col1, Col2, Col3, column1, column2, 2 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableA.col2 = TableB.Column2
AND TableB.Column3 IS NULL
UNION ALL
-- Query no. 3
SELECT col1, Col2, Col3, column1, column2, 3 AS seqNo
FROM TableA
INNER JOIN TableB ON TableA.col1 = TableB.Column1
AND TableB.Column2 IS NULL
AND TableA.col3 = TableB.Column3 ) AS t
) AS s
WHERE s.rn = 1
SQLFiddle here。