用MySQL连接表

时间:2018-12-13 09:12:00

标签: mysql

我有两个MySQL表:cpucpubench

cpu包含:id, name, price

cpubench包含:name, mark, rank

如果两个表的名称匹配,我希望将mark中的cpubench添加到新列中的cpu中。

我相信我应该使用左联接

我找到了以下代码

SELECT users.name AS user,
       products.name AS favorite
FROM users
LEFT JOIN products
ON users.fav = products.id

但是我不确定如何执行此操作,是否需要在cpu上添加标记列? 然后,如何填写“左联接”代码。

请尽可能简单地解释

谢谢

编辑1:我的代码到此为止  sql = ("SELECT cpu.id, cpu.name, cpu.price, cpubech.mark, FROM cpu LEFT JOIN cpubench ON cpu.name = cpubench.name") 但是我得到了错误:

  

您的SQL语法有错误;在第1行的'FROM cpu LEFT JOIN cpubench ON cpu.name = cpubench.name'附近使用相应的语法检查与MySQL服务器版本相对应的手册

编辑2:感谢Cid,我已经修复了语法问题,但是现在没有标记值被匹配,即使我已经检查cpubench中是否有标记并且名称相同,cpu中的所有标记值都为空,请参见:{ {3}}

3 个答案:

答案 0 :(得分:0)

您的查询语法无效(如错误消息所述):您选择的字段中的逗号过多

SELECT cpu.id, cpu.name, cpu.price, cpubech.mark, FROM ...
--        Remove this --------------------------^

答案 1 :(得分:-1)

是的,这是左联接。为了使联接正确执行,两个表中都将需要类似的列。您可以将cpu中的NAME映射到cpubench中的NAME。您无需在此处创建新列。该代码将自动将cpubench到cpu的排名附加到两个表中都存在的所有名称。希望能清除。

选择cpu.name AS a,        cpubench.name AS b 从cpu 左联接cpubench 在a.name = b.name

答案 2 :(得分:-1)

您问题的快速答案是

SELECT cpu.id, 
       cpu.name, 
       cpu.price, 
       cpubech.rank,
FROM cpu LEFT JOIN cpubench ON cpu.name = cpubench.name

如果要更改名称,可以使用AS键盘将别名添加到列中。

通过该查询,您将获得cpu表上的所有值,而对于没有匹配的cpubench行的那些值,您会在{{ 1}}字段。

使用NULL(或rank)仅使CPU具有匹配的基准。

请注意,我会更改表格的结构:

  • 如果您需要保留两个表,我将使用JOIN中的INNER JOIN而不是id作为外键
  • 两个表之间的关系似乎是(0,1)-(1,1),其中每个工作台都有一个cpu,但没有相反的关系。我会开始考虑只包含一个表和两个表的数据是否是一个好主意。