有两个表 - incoming tours(id,name)
和incoming_tours_cities(id_parrent, id_city)
,其中id_parrent
是来自第一个表的ID。
这是我写的查询
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc0 ON tc0.id_parrent = t.id
AND tc0.id_city = '1'
JOIN `incoming_tours_cities` tc1 ON tc1.id_parrent = t.id
AND tc1.id_city = '6'
现在,问题是什么......
为什么我不能在单个连接中写两个条件?(即我可以,但它返回空结果。)
据我所知加入,当我写作
JOIN incoming_tours_cities tc ON tc.id_parrent = t.id
它必须返回条件为true的行列表。不是吗?
为什么我不能写
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc ON tc.id_parrent = t.id
AND tc.id_city = '1'
AND tc.id_city = '6'
也许有更有效的方法来丰富相同的效果(因为在我的结构中,条件的数量可能非常大)
非常感谢
答案 0 :(得分:0)
tc.id_city的值不能同时为'1'和'6'。我想你想要一个OR而不是AND:
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc ON tc.id_parrent = t.id
AND (tc.id_city = '1'
OR tc.id_city = '6')
答案 1 :(得分:0)
这样想。如果你要求来自incoming_tour_cities的id_city值为'1'并且同时'6'的行,你会匹配多少行?
你真正想要的是:
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc ON tc.id_parrent = t.id
WHERE (tc.id_city = '1' OR tc.id_city = '6')
或更紧凑:
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc ON tc.id_parrent = t.id
WHERE tc.id_city IN ('1', '6')
答案 2 :(得分:0)
基于用户澄清第一个查询是他想要复制的查询的替代答案。
这是我所知道的唯一“捷径”方式,其中“捷径”意味着不执行两次独立测试(使用JOIN或EXISTs条款):
SELECT t.cities
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc ON tc.id_parrent = t.id
WHERE tc.id_city IN ('1', '6')
GROUP BY t.cities HAVING COUNT(DISTINCT tc.id_city) > 2