我想从一个带有两列的IN子查询中获取一个值,而不需要进行两次查询。
样品:
SELECT * FROM table1 WHERE id IN(SELECT id, flags FROM table2);
现在我想直接获得flags
。是否可能,如果可以,怎么样?
感谢任何帮助:)
答案 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;