我想知道如果'产品'是电视并且标记是好的,那么我希望颜色是红色的。但是,我也希望每一行电视标记都不是'好'而不管颜色如何。所以我使用NOT EXISTS()检查电视行'标记是否没有'好',但它失败了。我是否使用NOT EXISTS()错误或任何其他方式?预期的输出是得到所有产品电视与红色标记好,但也任何产品电视标记不是'好'的方面
<?php
$sql = $wpdb->get_var( $wpdb->prepare("
SELECT product FROM table WHERE product='tv' AND amount IN (%s, %s, %s)
AND mark='good' AND color=%s
OR NOT EXISTS
(SELECT product FROM talble WHERE product='tv'
AND amount IN (%s, %s, %s) AND mark = 'good') GROUP BY product
",$amount1,$amount2,$amount3,$color,$amount1,$amount2,$amount3));
/*
product amount color mark
tv 4 red good
tv 5 yellow bad
tv 4 black OK
tv 6 black bad
tv 4 yellow good
radio 5 yellow good
radio 6 yellow good
*/
?>
答案 0 :(得分:0)
根据您的文字说明,我认为您想要的SQL更类似于
select
product
from
table
where
amount in (%s, %s, %s) and
product='tv' and
((mark='good' and color=%s) or mark!='good')
group by
product
答案 1 :(得分:0)
您应该考虑更改您的查询,如下所示
SELECT product
FROM table
WHERE (product='tv'
AND amount IN (%s, %s, %s)
AND mark='good'
AND color=%s )
OR NOT EXISTS
(SELECT 1 FROM talble WHERE product='tv'
AND amount IN (%s, %s, %s) AND mark = 'good')
GROUP BY product