结合两个表

时间:2018-04-17 10:26:51

标签: sql sql-server tsql sql-server-2012

我对SQL很新,并且遇到以下问题。考虑这些表'汽车'和'颜色':

[Cars]
CarID   | Brand | ColorID   | Amount
1       | Ford  | 10        | 23
2       | VW    | 11        | 15
3       | Opel  | 11        | 12
4       | Opel  | NULL      | 21
5       | Ford  | NULL      | 16

[Colors]
ColorID | ColorName 
10      | Blue
11      | Red
12      | White
13      | Green

我想要一个查询列出所有带有ColorNames的汽车,以便我有这个输出:

CarID   | Brand | ColorName | Amount
1       | Ford  | Blue      | 23
2       | VW    | Red       | 15
3       | Opel  | Red       | 12
4       | Opel  | NULL      | 21
5       | Ford  | NULL      | 16

SELECT CarID, Brand, ColorName, Amount 
FROM Cars, Colors 
WHERE Cars.ColorID = Colors.ColorID

省略了ColorName = NULL的记录。

SELECT CarID, Brand, ColorName, Amount 
FROM Cars, Colors 
WHERE Cars.ColorID = Colors.ColorID OR 
      Cars.ColorId IS NULL 

产生太多记录。

我需要什么SQL语句?我正在使用Microsoft SQL Server 2012。

谢谢, COOZ

4 个答案:

答案 0 :(得分:2)

USE jQuery(".results").html(data);

像这样:

LEFT JOIN

<强>输出:

SELECT ca.CarID, ca.Brand, cl.ColorName, ca.Amount 
FROM Cars AS ca
LEFT JOIN Colors AS cl
ON ca.ColorId = cl.ColorId

链接到演示:

  

http://sqlfiddle.com/#!18/28f27/1

<强>说明

CarID Brand ColorName Amount 1 Ford Blue 23 2 VW Red 15 3 Opel Red 12 4 Opel (null) 21 5 Ford (null) 16 像这样工作

enter image description here

一般语法:

LEFT JOIN

如需更多信息,请点击以下链接:

  

https://www.w3schools.com/sql/sql_join_left.asp

     

http://www.dofactory.com/sql/left-outer-join

答案 1 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

您正在寻找LEFT JOIN,因此正确的语法是:

SELECT ca.CarID, ca.Brand, co.ColorName, ca.Amount
FROM Cars ca LEFT JOIN
     Colors co
     ON ca.ColorID = co.ColorID;

注意:您还应该学习使用表别名和限定列名。每当您的查询引用多个表时,您应该限定所有列名。

答案 2 :(得分:0)

使用左连接。这将从第二个表中选择所有colorid's,并将为colours表中没有数据的汽车返回空值

Select  CarID   , Brand , ColorName,   Amount
from cars 
Left join colors 
on cars.colorid = colors.colorid

答案 3 :(得分:0)

ndb_mgmd --reload --config-file /var/lib/mysql-cluster/config.ini

试试这个好友