MySQL:JOIN,其中ON可以与null比较

时间:2014-05-25 20:19:52

标签: mysql sql

我有:

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
)

问题:

  1. 如何处理4th行返回null的情况?
  2. 我可以使用t1&子查询中的t2别名?
  3. 更新了[额外的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中的这两个实体是否具有相对的正确条件。

1 个答案:

答案 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公开,所以我可以帮助。