子查询的SQL IN运算符值

时间:2017-05-06 16:15:24

标签: sql sqlite

我想从一个带有两列的IN子查询中获取一个值,而不需要进行两次查询。

样品:

SELECT * FROM table1 WHERE id IN(SELECT id, flags FROM table2);

现在我想直接获得flags。是否可能,如果可以,怎么样?

感谢任何帮助:)

2 个答案:

答案 0 :(得分:3)

听起来你正试图实现两件事之一:

1)选择table1中的每个记录字段(以及关联的表2标志),其中还在table2的id列中找到记录的id。如果是这种情况,那么是的,联接将完成你想要的:

SELECT t1.*, 
       t2.flags
FROM table1 t1 
JOIN table2 t2
  ON t1.id = t2.id;

请注意,此处使用了JOIN(而不是其他类型的联接,例如LEFT JOIN),因为JOIN将只返回 table1记录table2.id。另一方面,LEFT JOIN将返回每个 table1记录,而table2中没有匹配的table1 id将只返回返回表的flags列中的null

2)选择table1中的每个记录字段,其中记录的id也可以在中找到 table2 的id列或 table2的flags列。如果是这种情况,有几种方法可以获得所需的结果,但使用类似于问题的子查询来实现这一点

SELECT * 
FROM table1
WHERE id IN (SELECT id FROM table2 UNION DISTINCT SELECT flags FROM table2)

答案 1 :(得分:2)

您可以使用join执行此操作:

SELECT t1.*, t2.flags
FROM table1 t1 JOIN
     table2 t2
     ON t1.id = t2.id;