我有两个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语法有错误;查看与mysql服务器版本相对应的手册,以获得在第1行使用near'from cpu left join cpubench on cpu.name=cpubench.name'的正确语法
编辑2:我已经修复了语法问题,感谢cid,但是现在没有匹配的标记值cpu中的所有标记值都为空,即使我检查了cpubench中是否有标记并且名称相同,请参见:https://imgur.com/a/k86epqe
3条答案
按热度按时间6vl6ewon1#
对你的问题快速而肮脏的回答是
可以使用
AS
如果你想改变名字的话。通过这个查询,您将得到
cpu
对于那些没有匹配的cpubench
你会找到的那排NULL
上rank
现场。使用
JOIN
(或INNER JOIN
)只有具有匹配基准的CPU。如我所说,我要改变你们table的结构:
如果你需要保留这两张table,我会用
id
而不是name
在cpubench
作为外键两个表之间的关系似乎是(0,1)-(1,1),其中每个工作台都有一个cpu,而不是相反。我开始想,如果只有一个表包含两个表的数据是个好主意。
1wnzp6jl2#
是的,这是一个左连接。为了正确执行联接,两个表中都需要类似的列。在您的例子中,您可以将cpu中的nameMap到cpubench中的name。您不必在此处创建新列。代码将自动将从cpubench到cpu的秩附加到两个表中存在的所有名称上。希望一切都会好起来。
从cpu left join cpubench on a.name=b.name中选择cpu.name作为a,cpubench.name作为b
lpwwtiir3#
您的查询语法无效(如错误消息所述):所选字段中的逗号过多