我有:
simple_table
|- first_id
|- second_id
SELECT * FROM table t1 JOIN table t2
ON [many many conditions]
ON t1.id IN (SELECT first_id FROM simple_table)
AND t2 = (
SELECT second_id FROM simple_table WHERE t1.id = first_id //4th row, can return NULL
)
问题:
4th
行返回null的情况?t1
&子查询中的t2
别名?更新了[额外的wxplanation]
我有很大的table
。我需要迭代表并检查一些条件。实际上simple_table
提供了table
个实体的ID,我应该检查这些实体的条件。我的意思是:
simple_table
first_id second_id
11 128
table
id <other_fields>
................
11 <other_data>
...............
128 <other_data>
所以,我应该检查table
中的这两个实体是否具有相对的正确条件。
答案 0 :(得分:2)
问题不明确,但是如果有更新,如果大表的ID有一个索引(可能它已经作为PK
),查询应该会更好。
由于条件似乎在同一个表上,最简单的查询将是
SELECT ...
FROM bigtable t1
INNER JOIN simple_table st ON t1.ID IN (st.first_id, st.second_id)
或
SELECT ...
FROM bigtable t1
INNER JOIN simple_table st ON t1.ID = st.first_id
INNER JOIN bigtable t2 ON st.second_id = t2
从bigtable获取结果的同一行中的两行
第二个查询将使检查更容易编写,第一个查询会更快,但最有可能需要GROUP BY
来返回想要的结果。
需要对OP机器进行一些性能测试才能获得最快的性能测试。
如果simple_table
中的其中一个ID为NULL
,则仅考虑另一个,则代码必须对其进行检查。
您可以在子查询中使用表的别名,并且您需要这样做,因为您可能在子查询中具有相同的表。
检查的相对条件仍然未被OP公开,所以我可以帮助。