我对MYSQL查询有一些问题。我正在尝试做一个有多个参数的LEFT JOIN。
数据库结构:
一个士兵可以有多个标签,这些标签被分配给具有ManyToMany关系的士兵
我的查询在搜索功能中使用,用户可以添加一些他/她想要查找的标签。到目前为止,可以使用一个标记进行搜索,但是一旦添加了多个标记,查询就不会返回结果,即使它应该返回结果。
使用的查询:
SELECT *
FROM soldiers s LEFT JOIN
soldier_tag st
ON s.id = st.soldier_id
WHERE st.tag_id = 5;当用户输入2个标签时,两个标签都应该算术。查询将变成这样:
SELECT *
FROM soldiers s LEFT JOIN
soldier_tag st
ON s.id = st.soldier_id
WHERE st.tag_id = 5 AND st.tag_id = 7;有谁知道我怎么解决这个问题吗?
提前感谢
发布于 2016-11-27 04:05:30
您将希望在参数后面使用'IN‘,如下所示,这将在执行查询时考虑这两个参数。
SELECT * FROM soldiers s LEFT JOIN soldier_tag st ON s.id = st.soldier_id WHERE st.tag_id IN (5,7);
发布于 2016-11-27 01:48:23
当连接条件与一组值(例如一组标记)相关时,您应该使用in子句
SELECT *
FROM soldiers s
LEFT JOIN soldier_tag st ON s.id=st.soldier_id
WHERE st.tag_id in ( 5 , 7)发布于 2016-11-27 01:53:10
如果您希望所有标签都匹配,我建议您将查询表述为如下所示:
SELECT s.*
FROM soldiers s
WHERE s.id IN (SELECT st.soldier_id
FROM solder_tag st
WHERE st.tag_id IN (5, 7) -- construct an `IN` list instead of a bunch of boolean expressions
GROUP BY st.soldier_id
HAVING COUNT(*) = 2 -- 2 is the number of tags
);子查询返回所有标签都匹配的soldier_id。您需要将列表放在IN中,将计数放在HAVING子句中。
https://stackoverflow.com/questions/40821239
复制相似问题