Mysql 如何选择两个以上的表格?

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

在花了相当多的时间尝试和进行了一些研究之后,我终于投降了,并向你们寻求帮助。这就是我的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 |蓝|中|好
你所需要的只是一个简单的加入我相信

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.*