2

对于 MySQL 和关系数据库,我还是个新手,但是我正在从事的一个项目要求我编写一些复杂SELECT的语句,此时我有点困惑。我有三个表来存储有关各种产品的信息。Table1 存储每个产品的页面内容,table2 存储关于每个产品的特定标准(型号、材料、颜色等),table3 是一个链接表,用于在 T1 和 T2 之间建立多对多关系。

这是我的选择语句给我的:

Array
(
    [name] => color
    [value] => Red
    [title] => Product 1
)
Array
(
    [name] => material
    [value] => Wood
    [title] => Product 1
)

例如,我对如何选择既是“红色”又是“木头”的产品感到困惑——基本上都有每种产品的记录及其描述。

Array
(
    [material] => Wood
    [color] => Red
    [title] => Product 1
)

选择语句:

SELECT table2.name, table3.value, table1.title
FROM table2

INNER JOIN table3
ON table2.id=table3.varid

INNER JOIN table1
ON table1.id=table3.contentid
4

1 回答 1

1

您必须再次加入其他表。您需要给表起别名以将它们区分开来:

SELECT table2.name, table3.value, table1.title, t3.value, t1.title
FROM table2
JOIN table3 ON table2.id=table3.varid and value = 'Wood'
JOIN table1 ON table1.id=table3.contentid
JOIN table3 t3 ON table2.id=t3.varid and value = 'Red'
JOIN table1 t1 ON t1.id=t3.contentid;

您可以将值测试放在WHERE子句中,但这种方式更有效,因为谓词在连接时执行,而不是在整个连接结果上执行。

请注意INNER JOINJOIN含义相同(INNER隐含)

于 2012-07-26T19:12:17.123 回答