Mysql 如何选择两个以上的表格?
在花了相当多的时间尝试和进行了一些研究之后,我终于投降了,并向你们寻求帮助。这就是我的MySQL表的外观: 表1: Parent_ID | ID | Name | Quality |Price 1 | 001|Apple | good |1.50 1 | 002|Apple | medium |1.20 1 | 003|Apple | poor |0.99 2 | 004|Car | good |5000.00 2 | 005|Car | poor |200.00 家长| ID |姓名|质量|价格 1 | 001 |苹果|好| 1.50 1 | 002 |苹果|中等| 1.20 1 | 003 |苹果|差| 0.99 2 | 004 |汽车|良好| 5000.00 2 | 005 |汽车|差| 200.00 表2: Parent_ID | Var_Name | Value 1 | color | red 1 | size | big 1 | rating | 3 Star 2 | color | blue 2 | size | medium 2 | rating | ok 父项|变量|名称|值 1 |颜色|红色 1 |尺寸|大 1 |评级|三星级 2 |颜色|蓝色 2 |尺寸|中等 2 |评级|正常 好的,到目前为止还不错。我现在需要的是一个查询,它给出以下信息: Parent_ID | ID | Name | Quality | Price | color | size | rating 1 | 001 | Apple | good | 1.50 | red | big | 3Star 1 | 002 | Apple | medium | 1.20 | red | big | 3Star 1 | 003 | Apple | poor | 0.99 | red | big | 3Star 2 | 004 | Car | good | 5000.00 | blue | medium | ok 2 | 005 | Car | poor | 200.00 | blue | medium | ok 家长| ID |姓名|质量|价格|颜色|尺寸|评级 1 | 001 |苹果|好| 1.50 |红|大| 3Star 1 | 002 |苹果|中等| 1.20 |红色|大| 3Star 1 | 003 |苹果|差| 0.99 |红|大|三星 2 | 004 |汽车|良好| 5000.00 |蓝色|中等|正常 2 | 005 |车|差| 200.00 |蓝|中|好Mysql 如何选择两个以上的表格?,mysql,sql,Mysql,Sql,在花了相当多的时间尝试和进行了一些研究之后,我终于投降了,并向你们寻求帮助。这就是我的MySQL表的外观: 表1: Parent_ID | ID | Name | Quality |Price 1 | 001|Apple | good |1.50 1 | 002|Apple | medium |1.20 1 | 003|Apple | poor |0.99 2 | 004|Car | good |5000.0
你所需要的只是一个简单的加入我相信
SELECT *
FROM Table1 t1
JOIN Table2 t2
ON t1.Parent_Id = t2.Parent_Id
只需在join子句中对var_名称进行三次筛选即可连接到表2
SELECT t.parent_id,
t.id,
t.name,
t.quality,
t.price,
c.VALUE AS color,
s.VALUE AS size,
r.VALUE AS rating
FROM table1 t
LEFT JOIN table2 c
ON t.parent_id = c.parent_id
AND c.var_name = 'color'
LEFT JOIN table2 s
ON t.parent_id = s.parent_id
AND s.var_name = 'size'
LEFT JOIN table2 r
ON t.parent_id = r.parent_id
AND r.var_name = 'rating'
还有一种方法可以做到这一点。它只使用一个连接,但必须使用聚合函数
SELECT table1.*,
max(if(table2.var_name='color',table2.value, NULL)) as color,
max(if(table2.var_name='size',table2.value, NULL)) as size,
max(if(table2.var_name='rating',table2.value, NULL)) as rating,
FROM table1 join table2
WHERE table1.ID = table2.ID
GROUP BY table.*
根据您的预期数据,我假设
Table1
中的ID
列未用作键?如果(table2.varname='color',table2.value,NULL)作为表1中的“color”,则选择Table1.parentID作为表2的“color”,其中Table1.ID=table2.ID连接两个都有parent\u ID
列的表会让我感到恶心。看,这是可行的,但这是一个垃圾解决方案——即使是中等大小的表,它的性能也会非常差——每行执行3个查询!看看康拉德的答案,看看该怎么做。就是这样!谢谢你-你让我度过了美好的一天(至少是我的早晨:-)
SELECT table1.*,
max(if(table2.var_name='color',table2.value, NULL)) as color,
max(if(table2.var_name='size',table2.value, NULL)) as size,
max(if(table2.var_name='rating',table2.value, NULL)) as rating,
FROM table1 join table2
WHERE table1.ID = table2.ID
GROUP BY table.*