我想根据用户提供的一些约束来连接两个表。我不知道如何用语言表达,所以我将用一个例子来解释我想要做什么:
我有两张桌子:
l_id | l_fileid c_id | c_fileid
--------------------- ---------------------
1 | X1 1 | X2
2 | X1 3 | X2
3 | X1 2 | Y2
4 | X1
5 | Y1
2 | Y1
用户提供了类似的映射X1 -> X2, Y1 -> Y2
,因此结果如下所示:
l_id | l_fileid | c_fileid
-------------------------------------
1 | X1 | X2
2 | X1 | NULL
3 | X1 | X2
4 | X1 | NULL
5 | Y1 | NULL
2 | Y1 | Y2
我已经设法写下一个可以做到这一点的查询,但我希望这不是最好的方法。到目前为止,这是我想出的:
SELECT * FROM (
(SELECT * FROM L WHERE l_fileid='X1')
LEFT JOIN
(SELECT * FROM C WHERE c_fileid='X2')
ON l_id=c_id
)
UNION
SELECT * FROM (
(SELECT * FROM L WHERE l_fileid='Y1')
LEFT JOIN
(SELECT * FROM C WHERE c_fileid='Y2')
ON l_id=c_id
)