我在MySQL中遇到一个SELECT查询有点问题,我会感谢你的一些指示。请随时指出我现有的答案(如果有的话我错过了)。
查询目前如下:
SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id
WHERE ie.other_id = ? AND ue.unrelated_id = ?
ORDER BY ...
有三个表:即, e 和 ue 。
表 ie 和 ue 是 e 的关系,因此包含外键(e_id)。 ?表示输入参数。
问题是 ue.unrelated_id =?部分。我在尝试做的事情是:
不幸的是,如果我删除这个where子句,我会获得ue.ccc作为“随机”的unrelated_id。但是如果我保留它,如果这个unrelated_id不存在,查询将不会返回任何结果!我也尝试添加OR ue.unrelated_id IS NOT NULL,但如果ue表为空,这会使查询返回结果。
有什么想法吗?如果您需要进一步说明,请发表评论。我应该在接下来的几个小时内迅速回答。
答案 0 :(得分:8)
你可以做以下两件事之一:
SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id AND ue.unrelated_id = ?
WHERE ie.other_id = ?
ORDER BY ...
或者
SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id
WHERE ie.other_id = ? AND (ue.unrelated_id IS NULL OR ue.unrelated_id = ?)
ORDER BY ...
然而,我会使用第一个查询。
编辑:请注意,如果ue.unrelated_id
不是可以为空的列,则第二个查询仅适用。