如何检查查询的单列和子查询的多列?

时间:2019-04-06 23:21:32

标签: java sqlite

我正在尝试比较表的单列是否等于子查询在多列中返回的内容。如果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")

3 个答案:

答案 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.idtable2中的多行匹配。

相关问题