2014-11-23 67 views
-1

例如说法,我什么时候有一些行执行这个MySQL的语句MySQL的:如何跳过在当匹配的数据不存在

SELECT table1.a, table2.b, table3.c FROM table1, table2, table3 
WHERE 
    a.id = b.id 
    AND 
    a.id = c.id 

其中a.id = b.id,但没有行,其中a.id = c.id在这种情况下, 无行显示在结果中。

因此,我想让SQL忽略a.id = c.id语句,并只显示a.id = b.id为真的行。

你能告诉我怎么做?谢谢。

+0

难道你不能只从你的where子句中删除'a.id = c.id'吗? – 2014-11-23 01:23:34

+0

这听起来像你想做一个'左加入a.id = c.id'而不是你现在的隐式内连接。 – 2014-11-23 01:24:59

+0

看看[SQL连接的视觉解释](http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/),并确认左外连接是你所在的位置希望实现 – 2014-11-23 01:26:16

回答

0

你应该总是使用明确的join语法。一个简单的规则:从不from子句中使用逗号。

您的查询,正确编写的,是:

SELECT table1.a, table2.b, table3.c 
FROM table1 a join 
    table2 b 
    on a.id = b.id join 
    table3 c 
    on a.id = c.id; 

我注意到您使用表别名(a”,bc)是相同的列名。这是不寻常的,但允许。

如果你想从a保存记录,然后切换到left join

SELECT table1.a, table2.b, table3.c 
FROM table1 a left join 
    table2 b 
    on a.id = b.id left join 
    table3 c 
    on a.id = c.id; 

这个语法是优于隐join因为它支持外连接。大多数人也认为它更可读和更清晰。

+0

谢谢您的建议!我使用LEFT JOIN解决了这个问题。 – CSharper9165 2014-11-23 21:36:12

相关问题