我正在尝试比较表的单列是否等于子查询在多列中返回的内容。如果table1.id等于table2.first或table2.second之一,我希望能够返回行。有效的语法是什么?
我尝试了下面的内容,但是它不是有效的语法,因为我得到“结果:子选择返回2列-预期为1”。
SELECT table1.id, table1.attr1, table1.attr2 FROM table1 WHERE table1.id IN (SELECT table2.first, table2.second FROM table2 WHERE type != "..." AND type != "someType")
答案 0 :(得分:0)
也许您打算这样:
SELECT
t1.id,
t1.attr1,
t1.attr2
FROM table1 t1
WHERE
EXISTS (SELECT 1 FROM table2 t2 WHERE t2.first = t1.id AND type <> 'someType') OR
EXISTS (SELECT 1 FROM table2 t2 WHERE t2.second = t1.id AND type <> 'someType');
每个EXISTS
子句检查table1.id
值与table2
列的可能匹配。
答案 1 :(得分:0)
仅当条件匹配时,如果您想从t1
中进行选择,则不需要子查询。尝试以下查询:
SELECT
t1.id,
t1.attr1,
t1.attr2
FROM table1 t1 , table2 t2
WHERE
(t1.id = t2.first OR t1.id = t2.second)
AND t2.type not in ('someType' , "...");
答案 2 :(得分:0)
您可以使用内联接:
SELECT DISTINCT t1.id, t1.attr1, t1.attr2
FROM table1 t1 INNER JOIN table2 t2
ON t2.first = t1.id OR t2.second = t1.id
WHERE t2.type <> "..." AND t2.type <> "someType"
ON子句可以这样写:
ON t1.id IN (t2.first, t2.second)
我使用DISTINCT
是为了防止table1.id
与table2
中的多行匹配。