MySQL内连接查询未返回正确结果

3

我是新手,对于内连接还不太熟悉。在这里,我无法弄清楚出了什么问题。我希望能返回表“events”中的所有行。以下是我的表:

+----+---------+----------+    +----+---------+
| ID |  name   | venue_id |    | ID | name    |
+----+---------+----------+    +----+---------+
| 1  | Hub dub | 2        |    | 2  | hub dub |
| 2  | Test 2  | 2        |    +----+---------+
| 3  | Test 3  | 2        |
| 4  | Test 4  | 2        |
+----+---------+----------+

以下是查询:

SELECT DISTINCT a.*, b.name AS venue a 
FROM events b 
INNER JOIN venues ON a.venue_id = b.id 
WHERE a.name LIKE '%hub%' OR b.name LIKE '%hub%'

由于某些原因,在我更复杂的版本中,只返回了事件编号#1。


1
您当前的查询存在语法错误:http://www.sqlfiddle.com/#!2/36616/2。一旦修复,所有4条记录将按预期返回:http://www.sqlfiddle.com/#!2/36616/1。 - mellamokb
6个回答

1

语法有点问题。别名(a)需要放在表格后面(你把它放在列别名后面了)。

SELECT DISTINCT a.*, b.name AS venue 
FROM events b 
INNER JOIN venues a ON a.venue_id = b.id 
WHERE a.name LIKE '%hub%' OR b.name LIKE '%hub%'

1

这是一个打字错误吗?

SELECT DISTINCT a.*, b.name AS venue a
-------------------------------------^

应该是这样的:

SELECT DISTINCT a.*, b.name AS venue 
FROM events b 
INNER JOIN venues a ON a.venue_id = b.id 
WHERE a.name LIKE '%hub%' OR b.name LIKE '%hub%'

这被称为别名。它应该始终在表侧,在FROM之后。


0

就这样做

         SELECT DISTINCT a.*, b.name AS venue 
         FROM events b 
         INNER JOIN venues a ON a.venue_id = b.id 
         WHERE a.name LIKE '%hub%' OR b.name LIKE '%hub%'

0

我认为你想要的是将表A与B进行左连接。

SELECT a.*, b.name AS venue FROM events b 
   LEFT JOIN venues a ON a.venue_id = b.id
   WHERE a.name LIKE '%hub%' OR b.name LIKE '%hub%'

http://www.sqlfiddle.com/#!2/a2581/1/0


0
这是你想要的吗?

SELECT DISTINCT a.*, b.name AS venue a FROM events b LEFT JOIN venues ON a.venue_id = b.id and b.name LIKE '%hub%'


0

结果是正确的,您已经通过venue_id和id将两个表连接起来,结果是从表venues中选择所有行,并且包含表events的列名,之后您使用包含%hub%字符串的过滤器筛选出两个表中都存在的列名,结果只有第一行。

附注:您错过了表venues的一个标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接