让我们说我有2个结果集如下
R1 R2
| 1 | | 5 |
| 2 | | 6 |
| 3 | | 7 |
| 4 | | 8 |
我需要将这些结果合并到一个SET中, 所以我会有这样的事情:
R3
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
目前, 我正在这样做一个像这样的UNION:
SELECT c_1 AS result FROM table WHERE c_1=3 OR c_2=3
UNION
SELECT c_2 AS result FROM table WHERE c_1=3 OR c_2=3
基本上,我最终在桌子上执行了两次相同的操作, 每次只检索不同的行。 有没有更有效的方法可以做到这一点? 我需要将结果放在一个列中,因为这是IN的限制。 从长远来看,我需要做的就是这个
SELECT name FROM person WHERE person_id IN
(SELECT c_1 AS result FROM table WHERE c_1=3 OR c_2=3
UNION
SELECT c_2 AS result FROM table WHERE c_1=3 OR c_2=3)
有更好的方法可以找到所有这些吗? 欢迎任何和所有帮助。
答案 0 :(得分:6)
而不是IN ()
子查询,您可以在上执行INNER JOIN
c_1 OR c_2
SELECT
name
FROM
person
/* Join against the other table on *either* column c_1 or c_2 */
INNER JOIN `table` ON `table`.c_1 = person.person_id OR `table`.c_2 = person.person_id
WHERE
/* And the WHERE condition only needs to be applied once */
c_1 = 3 OR c_2 = 3