mysql - 在 mySQL 的嵌套子查询中选择多列的推荐方法

标签 mysql select subquery

在嵌套子查询中选择多列推荐使用哪些方法?自从我对任何查询进行编码以来已经有一段时间了,而且我很难解决这个问题。具体挑战在下面代码的第 2 行。 IN 操作数在这里不能正常工作(请参阅下面的错误消息),我不确定这是否只是我使用的语法问题,并且/或者有更好的方法来解决这个问题(即使用 HAVING 操作数或 JOIN 语句)

SELECT * FROM Rules WHERE Rules.LNRule_id 
    IN(SELECT LNRule_id1,LNRule_id2,LNRule_id3,LNRule_id4 FROM Silhouette
    WHERE Silhouette.Silhouette_Skirt=(SELECT Silhouette_Skirt FROM Style
        WHERE Style.Style_Skirt='$Style_Skirt')
    )

此查询的目的是SELECTRules中的所有相关行,以获得表Style中的特定值(即$Style_Skirt),它通过将它与几个因素之一匹配来实现 - 在本例中为服装的 Silhouette。因此,我在这部分查询中尝试做的是 SELECTRules 中的所有行,其 ID (LNRule_id) 匹配任何表 Silhouette

中的指定列
(SELECT LNRule_id1,LNRule_id2,LNRule_id3,LNRule_id4 FROM Silhouette WHERE Silhouette.Silhouette_Skirt=(...)) 

编辑 存在多对多关系(每个Silhouette有多个适用的Rules,每个Rule可以应用于多个Silhouettes)。所有规则都位于表“Rules”中(每行一个),并且每个规则都有一个 ID ('LNRule_id')。表“Silhouette”的列告诉它需要通过“LNRule_id”从“规则”调用哪些行 (LNRule_id1,2,3,4 指示应调用哪些规则,并存储 id 的值表“规则”中的相关行)


当前由 IN 操作数生成的错误消息是:

SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

最佳答案

我想你想要这个查询

SELECT * FROM  Rules r
JOIN Silhouette s
(ON r.LNRule_id=s.LNRule_id1
OR r.LNRule_id=s.LNRule_id2
OR r.LNRule_id=s.LNRule_id3
OR r.LNRule_id=s.LNRule_id4)
JOIN Style st
ON s.Silhouette_Skirt=st.Silhouette_Skirt
WHERE st.Silhouette_Skirt = '$Style_Skirt'

关于mysql - 在 mySQL 的嵌套子查询中选择多列的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28397151/

相关文章:

mysql - 在嵌套子查询中引用表

php - 如何使用 mysql 和 php 显示查询(带有子查询)的结果,其中一列可以有多个信息?

jquery - 选择文件不适用于 uploadify beta 3

MySQL:从给定的 `Date`对象查找一年中的第一个和最后一个日期

php - 按不工作排序

c# - 如何遍历临时表的循环以取出SQL中的每个列名?

mysql - 仅在特定日期之后选择带有 bar 事件的 foo

mysql - 查询优化。没有 NOT IN 的查询

PHP T9 手机键盘

php - WHILE 中的 IF 语句不起作用