MySQL - 单个查询与不同无关表之间的多个查询

时间:2018-04-11 03:38:01

标签: mysql sql sequelize.js

我需要从两个不同且不相关的表中获取两列,有两种方法可以做到这一点:

  1. 发送2个单独的查询:

    SELECT * FROM table_a WHERE id = "";

    SELECT * FROM table_b WHERE id = "";

  2. 发送1个查询:

    SELECT a.*, b.* FROM table_a AS a, table_b AS b WHERE a.id = "" AND b.id = "";

    • 我想知道是否有相同或者哪一个比另一个更好?
    • 如果没有明确的更好的,你喜欢哪个,为什么?
  3. 更新:

    • 我故意按ID查询,因此每张表只有1个结果

1 个答案:

答案 0 :(得分:2)

您提到的两种方式都可能会返回不同的结果集,这取决于您表中的数据。

但是如果你确定每个查询只返回单行,那么

两个单独的查询比加入

更好
SELECT * FROM table_a WHERE id = "";
SELECT * FROM table_b WHERE id = "";

您也可以使用以下内容

SELECT * FROM table_a WHERE id = ""
UNION 
SELECT * FROM table_b WHERE id = "";

从性能的角度来看,加入总是代价高昂

现在考虑一下你的查询(它如何返回不同数量的记录)

SELECT a.*, b.*
FROM table_a AS a, table_b AS b
WHERE a.id = "" AND b.id = "";

假设table_a中有2行,其中id =“” table_b中有3行,其中id =“”

然后,如果此连接查询(2 X 3 = 6),DB将返回结果集中的6行。虽然在上面提到的#1中,DB将只返回5行(2 + 3)

同样,结果集中的列数也会有所不同 如果table_a中有2列,table_b中有2列 然后 方式#1将仅包含结果集中的2列 在方式#2中,结果集中将有4列(每个表中有2列)