SELECT Statement Refinement

时间:2012-07-26 19:08:15

标签: mysql

对于MySQL和关系数据库,我是一个新手,但我正在研究的一个项目要求我编写一些复杂的SELECT语句,此时我有点困惑。我有三个表存储有关各种产品的信息。表1存储每个产品的页面内容,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语句:

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

1 个答案:

答案 0 :(得分: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