mysql - SELECT 语句细化

标签 mysql

在 MySQL 和关系数据库方面,我是一个新手,但我正在从事的一个项目要求我编写一些复杂的 SELECT 语句,我有点困惑这点。我有三个表,用于存储有关各种产品的信息。 Table1 存储每个产品的页面内容,table2 存储每个产品的具体标准(型号、 Material 、颜色等),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

最佳答案

您必须再次加入其他表。您需要为表格起别名以区分它们:

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)

关于mysql - SELECT 语句细化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676361/

相关文章:

具有动态 IP 的 MySQL 复制多主机到单个从机

mysql - 尝试优化通过投票事件列出选民的查询

MySQL插入查询错误代码: 1406.列数据太长

mysql - SQL结构和日历?

mysql - 合并分区如何增加扫描的行数?

mysql - 我可以执行 mysql 命令来过滤和删除重复条目吗

php - 在 MySQL 中插入多行时的行顺序

mysql - 从一个数据库中选择,插入到另一个数据库 - MySQL

mysql查询扫描所有行

mysql - 无法从cygwin中的源代码构建mysql连接器/c(libmysql)