我可能遗漏了一些东西,但我无法进行简单的SQL查询工作。 我有2个表城市和活动,我希望看到所有举办任何活动的城市。 下面的代码似乎执行了一些奇怪的事情,因为它只是重载了PHPMyAdmin。
SELECT city.name, city.date, city.gh, city.ga
FROM city
LEFT JOIN event ON city.id = event.city
当我尝试自然加入时,它会按预期显示在任何城市托管的所有事件。
答案 0 :(得分:1)
如果您只想查看举办活动的城市,请使用INNER JOIN
代替LEFT JOIN
。后者将显示所有城市,无论是否举办了活动。
答案 1 :(得分:1)
这是你用左连接做的方法,但是我没有看到这一点 - 只需使用内连接并做一个不同的连接。
SELECT distinct city.name, city.date, city.gh, city.ga
FROM city
LEFT JOIN event ON city.id = event.city
where event.city is not null
使用内部联接
SELECT distinct city.name, city.date, city.gh, city.ga
FROM city
JOIN event ON city.id = event.city
答案 2 :(得分:1)
您可能需要INNER JOIN
:
SELECT c.name, c.date, c.gh, c.ga
FROM city AS c
INNER JOIN event AS e ON c.id = e.city
看一下JOINS上的图解说明,应该可以帮到你。
如果您只想要有活动的不同城市名称,您可以使用:
SELECT DISTINCT c.name
FROM city AS c
INNER JOIN event AS e ON c.id = e.city
答案 3 :(得分:1)
你需要改变两件事:
INNER
加入(不要使用LEFT
关键字)DISTINCT
关键字,否则您将获得多次返回的同一城市(每次托管的活动一次)试试这个:
SELECT DISTINCT city.name, city.date, city.gh, city.ga
FROM city
JOIN event ON city.id = event.city
您也可以使用子选项来完成此操作,如下所示:
SELECT city.name, city.date, city.gh, city.ga
FROM city
WHERE id in (SELECT city from EVENT)
就个人而言,我发现子选择更容易理解 - 它几乎就像你用来描述问题的英语。
答案 4 :(得分:1)
SELECT city.name, city.date, city.gh, city.ga
FROM city
INNER JOIN event ON city.id = event.city
GROUP BY city.name
LEFT JOIN将返回city表中的所有条目,即使没有关联事件条目,输出结果集也会非常大,使用INNER JOIN只请求具有关联条目的行,并通过GROUP BY选择单个每个城市的行,因此您最终会得到一个唯一城市列表,其中包含事件表中关联的任何事件。
答案 5 :(得分:1)
有许多方法可以在SQL中表达这一点,您应该剖析以找出哪种方式最适合您的数据库。
SELECT DISTINCT city.name, city.date, city.gh, city.ga
FROM city
INNER JOIN event ON event.city = city.id
SELECT city.name, city.date, city.gh, city.ga
FROM city
INNER JOIN event ON event.city = city.id
GROUP BY city.name, city.date, city.gh, city.ga
SELECT city.name, city.date, city.gh, city.ga
FROM city
INNER JOIN (
SELECT DISTINCT event.city FROM event
) AS eventcity ON eventcity.city = city.id
SELECT city.name, city.date, city.gh, city.ga
FROM city
INNER JOIN (
SELECT event.city FROM event GROUP BY event.city
) AS eventcity ON eventcity.city = city.id
SELECT city.name, city.date, city.gh, city.ga
FROM city
WHERE city.id IN (SELECT event.city FROM event)
SELECT city.name, city.date, city.gh, city.ga
FROM city
WHERE EXISTS (SELECT city FROM event WHERE event.city = city.id)