我正在尝试对MySql执行查询
SELECT model, price
FROM (SELECT *
FROM product
LEFT JOIN printer, laptop, pc
ON product.model = printer.model = laptop.model = pc.model)
我知道这不是正确的语法,我试图找到每个产品的型号和价格。我首先尝试自然地将每个列表连接到产品但是想出了一个空集,因为第一个自然连接删除了其他两个产品的所有其他元组,然后下一个后续连接删除了所有内容。
我的真正问题是我应该使用什么类型的联接来执行此操作?
产品(制造商,型号,类型)
笔记本电脑(型号,价格,速度,内存,高清,屏幕)
PC(型号,价格,速度,内存,高清)
打印机(型号,价格,颜色,价格)
答案 0 :(得分:0)
为什么SELECT x来自(SELECT ...)?右转到内部:
SELECT model, price
FROM product
LEFT JOIN printer, laptop, pc
ON product.model = printer.model = laptop.model = pc.model
显然这仍然不起作用,因为存在一些语法错误。您需要做的是多个连接:
SELECT model, price
FROM product
LEFT JOIN printer ON product.model = printer.model
LEFT JOIN laptop ON product.model = laptop.model
LEFT JOIN pc ON product.model = pc.model
现在,这是一个有效的查询,但我怀疑在你的数据中它不会起作用,因为你在每台打印机,笔记本电脑和个人电脑都有价格(所以你会混淆你的意思是“价格” )。可能有一个更好的方法,但你可以这样做:
SELECT model, COALESCE(printer.price, laptop.price, pc.price)
FROM product
LEFT JOIN printer ON product.model = printer.model
LEFT JOIN laptop ON product.model = laptop.model
LEFT JOIN pc ON product.model = pc.model
coalesce做的是返回第一个非NULL参数(因此如果printer.price为null而laptop.price不为,则返回laptop.price)。
答案 1 :(得分:0)
这是一个很好的解决方案:
SELECT model, COALESCE(pr.price, la.price, pc.price) AS price
FROM product AS p
LEFT JOIN printer AS pr ON (p.model=pr.model)
LEFT JOIN laptop AS la ON (p.model=la.model)
LEFT JOIN pc ON (p.model=pc.model)
我应该注意到,您的表格结构可以根据您的目的进行增强,也可能用于您的应用程序。
而不是表格:
可能是:
甚至:
其中[other_characteristics]列包含其他信息的json。