sql - 在 SQL 中连接四个表
问题描述
我正在尝试将四个表连接在一起,它们的数据几乎相同。
+------------------+------------------+-------------------+-------------------+--+
| tableone.letters | tabletwo.letters | tablethree.leters | tablefour.letters | |
+------------------+------------------+-------------------+-------------------+--+
| 'a' | 'a' | 'a' | 'a' | |
+------------------+------------------+-------------------+-------------------+--+
| 'b' | 'b' | 'b' | 'e' | |
+------------------+------------------+-------------------+-------------------+--+
| 'c' | 'c' | 'c' | 'g' | |
+------------------+------------------+-------------------+-------------------+--+
| 'd' | 'd' | 'e' | | |
+------------------+------------------+-------------------+-------------------+--+
| 'e' | 'f' | | | |
+------------------+------------------+-------------------+-------------------+--+
| 'f' | 'g' | | | |
+------------------+------------------+-------------------+-------------------+--+
| 'g' | 'h' | | | |
+------------------+------------------+-------------------+-------------------+--+
| 'h' | 'i' | | | |
+------------------+------------------+-------------------+-------------------+--+
| 'i' | | | | |
+------------------+------------------+-------------------+-------------------+--+
| 'j' | | | | |
+------------------+------------------+-------------------+-------------------+--+
SELECT DISTINCT tableone.letters, tabletwo.letters, tablethree.letters, tablefour.letters FROM querytesting.tableone
FULL JOIN querytesting.tabletwo
ON tableone.letters = tabletwo.letters
FULL JOIN querytesting.tablethree
ON tabletwo.letters = tablethree.letters
FULL JOIN querytesting.tablefour
ON tablethree.letters = tablefour.letters;
当我加入他们时,我得到以下结果:
+------+------+------+------+--+
| "a" | "a" | "a" | "a" | |
+------+------+------+------+--+
| "b" | "b" | "b" | null | |
+------+------+------+------+--+
| "c" | "c" | "c" | null | |
+------+------+------+------+--+
| "d" | "d" | null | null | |
+------+------+------+------+--+
| "e" | null | null | null | |
+------+------+------+------+--+
| "f" | "f" | null | null | |
+------+------+------+------+--+
| "g" | "g" | null | null | |
+------+------+------+------+--+
| "h" | "h" | null | null | |
+------+------+------+------+--+
| "i" | "i" | null | null | |
+------+------+------+------+--+
| "j" | null | null | null | |
+------+------+------+------+--+
| "k" | null | null | null | |
+------+------+------+------+--+
| "l" | null | null | null | |
+------+------+------+------+--+
| null | null | "e" | "e" | |
+------+------+------+------+--+
| null | null | null | "g" | |
+------+------+------+------+--+
这不是我预期的结果。我希望第三列和第四列中的“e”和“g”与第一列中的“e”和“g”完美对齐。
有没有办法做到这一点?
先感谢您!
解决方案
鉴于您的解释,您需要做的就是用 FULL JOIN 所有表tableone
,尽管我不确定这是否是实际意图,特别是如果所有数据都只是样本。这里:
SELECT DISTINCT tableone.letters, tabletwo.letters, tablethree.letters, tablefour.letters
FROM tableone
FULL JOIN tabletwo
ON tableone.letters = tabletwo.letters
FULL JOIN tablethree
ON tableone.letters = tablethree.letters
FULL JOIN tablefour
ON tableone.letters = tablefour.letters;
看到它在这里工作:http ://sqlfiddle.com/#!17/acc44/4
推荐阅读
- python - 从 Series 或 DataFrame 中删除后缀
- laravel - Laravel Cashier 抛出异常 取消订阅时没有此类订阅
- java - Spring Upgrade 导致问题 dispatcherServletRegistration
- android - 如何在 android 中使用安全密钥方法配对两个 BLE 设备?
- html - 有没有办法让用户可以选择禁用他们博客文章上的评论?
- python - Pytorch LSTM predicts too low values
- typescript - Readable way for iterating over a JSON and creating rows
- c - A flexible list with indefinite number of nodes
- hibernate - How i can get lazy child in gsp with multi-tenant?
- c++ - IntelliSense in Visual Studio doesn't work - only for a specific project