我有两个MySQL表:cpu
和cpubench
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}}
答案 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
作为外键