我想从具有两列的 IN 子查询中获取一个值,而无需执行两个查询。
样本:
SELECT * FROM table1 WHERE id IN(SELECT id, flags FROM table2);
现在我想得到
flags
直接地。有可能吗,如果有,怎么做?任何帮助表示赞赏:)
最佳答案
听起来您正在尝试实现以下两件事之一:
1) 选择 table1 中记录的每个字段(以及关联的 table 2 标志),其中记录的 id 也在 table2 的 id 列中找到。如果是这种情况,那么是的,连接将完成您想要的:
SELECT t1.*,
t2.flags
FROM table1 t1
JOIN table2 t2
ON t1.id = t2.id;
请注意
JOIN
在这里使用(而不是其他类型的连接,例如 LEFT JOIN
),因为 JOIN
将仅返回与 table2.id 匹配的 table1 记录。 LEFT JOIN
另一方面,将返回每个 table1 记录,并且 table2 中没有匹配的 table1 id 将简单地具有 null
在您返回的表的标志列中。2) 选择 table1 中记录的每个字段,其中记录的 id 也在 table2 的 id 列或 table2 的 flags 列中找到。如果是这种情况,有几种方法可以获得所需的结果,但使用类似于问题的子查询来实现
SELECT *
FROM table1
WHERE id IN (SELECT id FROM table2 UNION DISTINCT SELECT flags FROM table2)
关于子查询的 SQL IN 运算符值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43822680/