尝试使用NOT EXISTS检查行存在但失败

时间:2016-07-27 16:20:11

标签: php mysql

我想知道如果'产品'是电视并且标记是好的,那么我希望颜色是红色的。但是,我也希望每一行电视标记都不是'好'而不管颜色如何。所以我使用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
*/

?>

2 个答案:

答案 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