在嵌套子查询中选择多列推荐使用哪些方法?自从我对任何查询进行编码以来已经有一段时间了,而且我很难解决这个问题。具体挑战在下面代码的第 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')
)
此查询的目的是SELECT
表Rules
中的所有相关行,以获得表Style
中的特定值(即$Style_Skirt
),它通过将它与几个因素之一匹配来实现 - 在本例中为服装的 Silhouette
。因此,我在这部分查询中尝试做的是 SELECT
表 Rules
中的所有行,其 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/