从多个表中选择行。怎么样?

时间:2012-01-17 07:02:19

标签: mysql sql

假设我们有树表。

Products                  Fields                Fields Value
----------------          -------------         --------------
  pid    catid             fid   catid            fid   pid   value
-------|-------|          -----|-------         ------|-----|--------
   1       1                1      1               1     1     25%
   2       1                2      1               1     2     32.5%
                            3      2               2     1     45%
                                                   2     2     42%
                                                   3     1     17.3%
                                                   3     2     21%

通常的方法是在一个查询中选择Products并循环遍历结果集(RS1)。
然后,我们为每行选择Fields catidRS2)。 然后使用RS2执行相同的操作以选择“字段值”。

只有问题是性能问题,由于执行大量查询`,当每个表中有很多行时,性能会降低。

您是否建议我更好地执行减少查询

修改
我希望在一个方框中显示每个产品,并为每个产品显示其正确值的字段。将树表连接在一起将返回FieldValue中每个Products的重复值,并且不能在循环中使用。

4 个答案:

答案 0 :(得分:2)

猜猜你需要什么,试试这个:

SELECT f.catid, fv.* FROM Fields f
INNER JOIN Products p 
  ON f.catid = p.catid
INNER JOIN FieldsValue fv
  ON fv.fid = f.fid AND fv.pid = p.pid

答案 1 :(得分:1)

SELECT * 
  FROM Products
       NATURAL JOIN Fields
       NATURAL JOIN FieldsValue;

答案 2 :(得分:0)

使用加入语法:

SELECT * FROM Products as P
LEFT JOIN FieldsValue as FV ON FV.PID = P.PID
LEFT JOIN Fields as F on F.fid = FV.fid

答案 3 :(得分:0)

您可以使用left join

将表格连接在一起
select *
from Products p
left join Fields f on f.catid = p.catid
left join `fields value` fv on fv.fid = f.fid on fv.pid = p.pid
where p.pid = 1