这些是我的表格:
SELECT * FROM TableA
和SELECT * FROM TableB
Table A Table B
+-------+------+ +-------+------+
| FileA | StepA| | FileB | StepB|
+-------+------+ +-------+------+
| 001 | 1 | | 001 | 1 |
| 001 | 2 | | 001 | 2 |
| 001 | 3 | | 001 | 3 |
| 001 | 4 | | 002 | 1 |
| 001 | 5 | | 002 | 2 |
| 002 | 1 | | 002 | 3 |
| 002 | 2 | | 003 | 1 |
| 002 | 3 | +-------+------+
| 002 | 4 |
| 002 | 5 |
| 004 | 1 |
| 004 | 2 |
| 004 | 3 |
| 004 | 4 |
| 004 | 5 |
+-------+------+
我的结果:
SELECT * FROM TableA AS TA LEFT JOIN TableB AS TB ON TA.FileA != TB.FileB GROUP BY TA.FileA ORDER BY TA.StepA ASC
+-------+------+-------+------+
| FileA | StepA| FileA | StepB|
+-------+------+-------+------+
| 001 | 1 | 001 | 1 |
| 001 | 2 | 001 | 1 |
| 001 | 3 | 001 | 1 |
| 001 | 4 | 001 | 1 |
| 001 | 5 | 001 | 1 |
+-------+------+-------+------+
但这是我的预期结果:
+-------+------+-------+------+
| FileA | StepA| FileB | StepB|
+-------+------+-------+------+
| 001 | 1 | 001 | 1 |
| 001 | 2 | 001 | 2 |
| 001 | 3 | 001 | 3 |
| 001 | 4 | null | null |
| 001 | 5 | null | null |
| 002 | 1 | 002 | 1 |
| 002 | 2 | 002 | 2 |
| 002 | 3 | 002 | 3 |
| 002 | 4 | null | null |
| 002 | 5 | null | null |
| null | null | 003 | 1 |
| 004 | 1 | null | null |
| 004 | 2 | null | null |
| 004 | 3 | null | null |
| 004 | 4 | null | null |
| 004 | 5 | null | null |
+-------+------+-------+------+
是否可以使用连接或联合执行这些操作以便我可以获得这些输出?
答案 0 :(得分:0)
我认为这些SQL对你有用。
SELECT * FROM (
SELECT * FROM tablea AS TA LEFT JOIN tableb AS TB
ON TA.FileA = TB.FileB AND TA.stepA= TB.stepB
UNION
SELECT * FROM tablea AS TA RIGHT JOIN tableb AS TB
ON TA.FileA = TB.FileB AND TA.stepA= TB.stepB ) a
ORDER BY FileA, stepA,fileb ASC
谢谢。
答案 1 :(得分:0)
如果您真的想以这种方式订购价值,可以在子查询中使用coalesce():
SELECT
sub.`FileA`,
sub.`StepA`,
sub.`FileB`,
sub.`StepB`
FROM
(
SELECT
ta.`FileA`,
ta.`StepA`,
tb.`FileB`,
tb.`StepB`,
coalesce(ta.`FileA`, tb.`FileB`) AS `File`,
coalesce(ta.`StepA`, tb.`StepB`) AS `Step`
FROM
`TableA` ta
LEFT OUTER JOIN `TableB` tb ON (
ta.`FileA` = tb.`FileB`
AND ta.`StepA` = tb.`StepB`
)
UNION
SELECT
ta.`FileA`,
ta.`StepA`,
tb.`FileB`,
tb.`StepB`,
coalesce(ta.`FileA`, tb.`FileB`) AS `File`,
coalesce(ta.`StepA`, tb.`StepB`) AS `Step`
FROM
`TableA` ta
RIGHT OUTER JOIN `TableB` tb ON (
ta.`FileA` = tb.`FileB`
AND ta.`StepA` = tb.`StepB`
)
) sub
ORDER BY
sub.`File` ASC,
sub.`Step` ASC
有关COALESCE
的更多信息