我在 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 ...
共有三个表: ie 、 e 和 ue 。
即 和 ue 表是 e 的关系,因此包含它的外键 (e_id)。 ? 表示输入参数。
问题是 ue.unrelated_id = ? 部分。我真正想做的是:
不幸的是,如果我删除这个 where 子句,我会得到一个“随机”unrelated_id 的 ue.ccc。但是如果我保留它,如果这个 unrelated_id 不存在 ue ,则查询根本不会返回任何结果!我还尝试添加 OR ue.unrelated_id IS NOT NULL,但是如果 ue 表为空,这会使查询不返回任何结果。
有任何想法吗?如果您需要进一步说明,请发表评论。我应该在接下来的几个小时内迅速答复。
最佳答案
你可以做两件事之一:
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
不是可空列时,第二个查询才适用。关于mysql - "Optional"WHERE 子句(Mysql 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11906801/