mysql - 从mysql中的不同表中选择不相等的列

标签 mysql

我正在使用 mysql 并且我有三个表 T1、T2、T3 它们包含如下数据:

+-------+
| t1.id |
+-------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
+------+

+-------+
| t2.id |
+-------+
| 1    |
| 2    |
| 3    |
| 4    |
+-------+

+-------+
| t3.id |
+-------+
| 1    |
| 2    |
| 3    |
+-------+

    I want to be able to select data as follows:

id      t1.id   t2.id   t3.id
1       1       1       1
2       2       2       2
3       3       3       3
4       4       4       null
5       5       null    null

我该怎么做?

最佳答案

假设您打算使用 T1 作为基础 id,一对 LEFT JOIN 将为您提供所需的结果:

SELECT 
  /* base id */
  T1.id AS id,
  /* Redundant t1.id */
  T1.id AS t1_id,
  T2.id AS t2_id,
  T3.id AS t3_id
FROM
  T1
  LEFT JOIN T2 ON T1.id = T2.id
  LEFT JOIN T3 ON T1.id = T3.id

请注意,这会多余地使用 T1.id,但这正是您在建议输出中所拥有的内容,因此我在此处复制了它。

如果您真正想要的是从所有表中获取所有可能的 ID,请使用 UNION 进行连接。这会将三个表中不同的 ID 集组合成一个子查询 allids,用作 LEFT JOIN 其他三个表中每个表的基本 ID。如果一个特定的 id 存在于 T2 T1 那么它仍然会出现在输出中。

SELECT 
  allids.id AS id,
  T1.id AS t1_id,
  T2.id AS t2_id,
  T3.id AS t3_id
FROM
  ( SELECT id FROM T1 UNION SELECT id FROM T2 UNION SELECT id FROM T3 ORDER BY id) allids
  LEFT JOIN T1 ON allids.id = T1.id
  LEFT JOIN T2 ON allids.id = T2.id
  LEFT JOIN T3 ON allids.id = T3.id

关于mysql - 从mysql中的不同表中选择不相等的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989248/

相关文章:

php - 序列化数组时,不会序列化最后一个数字

mysql - 用于跟踪和分摊费用的数据库设计

mysql - 错误 sqoop.Sqoop : Got exception running Sqoop: java. lang.RuntimeException : Could not load db driver class: com. mysql.jdbc.Driver

mysql - 如何获取具有多个条件的查询结果?

php - 使用 laravel builder 进行 JSON 列查询

mysql - 查询以查找数据库架构上的外键

java - 使用 MySQL 的 DataJpaTest 存储库测试,Hibernate 不会将用户设置为在 H2 DB 中自动递增

python - 如何使用 python 在 json 中动态修改我的 datetime 对象?

php - 使用php和mysql以json格式进行分类多级显示

php - fatal error : Cannot re-assign auto-global variable _POST in kohana 3. 2