mysql 如果连接存在则更改 where 子句
mysql changing where clause if join exists
我想做的是加入相同的 table 并查看字段 "reference_id" 是否有值,如果有则它应该使用该值来获取包含数据的实际行,将该数据用于其余查询 - where 和 sort 子句,否则使用原始条目数据。
Table "entries" 字段:
id, text, type, reference_id, num_count
示例数据:
[1, "", 0, 2, 0],
[2, "some text", 2, 0, 50],
[3, "more text", 2, 0, 60],
应该return:
row 0: "more text"
row 1: "some text"
查询看起来像这样:
SELECT entries.text
FROM entries
LEFT JOIN entries as e2
ON entries.reference_id = e2.id
WHERE type = $type
ORDER BY num_count DESC
所以最后两个子句应该从entries.type
和entries.num_count
改为e2.type
和e2.num_count
如果reference_id有东西。我该如何实现?
请在where子句中写上别名
SELECT entries.text
FROM entries
LEFT JOIN entries as e2
ON entries.reference_id = e2.id
WHERE entries.type = $type
ORDER BY entries.num_count DESC
如果我理解正确,那么您只想使用左连接的 table 值(如果存在),否则使用主要的 tables 值。
我是这样的:-
SELECT COALESCE(e2.text, entries.text)
FROM entries
LEFT OUTER JOIN entries as e2
ON entries.reference_id = e2.id
WHERE type = $type
ORDER BY COALESCE(e2.num_count, entries.num_count) DESC
我想做的是加入相同的 table 并查看字段 "reference_id" 是否有值,如果有则它应该使用该值来获取包含数据的实际行,将该数据用于其余查询 - where 和 sort 子句,否则使用原始条目数据。
Table "entries" 字段:
id, text, type, reference_id, num_count
示例数据:
[1, "", 0, 2, 0],
[2, "some text", 2, 0, 50],
[3, "more text", 2, 0, 60],
应该return:
row 0: "more text"
row 1: "some text"
查询看起来像这样:
SELECT entries.text
FROM entries
LEFT JOIN entries as e2
ON entries.reference_id = e2.id
WHERE type = $type
ORDER BY num_count DESC
所以最后两个子句应该从entries.type
和entries.num_count
改为e2.type
和e2.num_count
如果reference_id有东西。我该如何实现?
请在where子句中写上别名
SELECT entries.text
FROM entries
LEFT JOIN entries as e2
ON entries.reference_id = e2.id
WHERE entries.type = $type
ORDER BY entries.num_count DESC
如果我理解正确,那么您只想使用左连接的 table 值(如果存在),否则使用主要的 tables 值。
我是这样的:-
SELECT COALESCE(e2.text, entries.text)
FROM entries
LEFT OUTER JOIN entries as e2
ON entries.reference_id = e2.id
WHERE type = $type
ORDER BY COALESCE(e2.num_count, entries.num_count) DESC