对于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
答案 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 JOIN
和JOIN
的含义相同(隐含INNER
)