SQL 'in' 有问题

Having trouble with SQL 'in'

我想在 product_description 中搜索与某个品牌匹配且在另一个 table product 中状态为“1”的所有记录。这就是我所达到的程度,但我在某处绊倒了:

SELECT brand,
       name,
       product_id
FROM   product_description
WHERE  brand = $brandname
       AND product_id IN (SELECT product_id,
                                 status
                          FROM   product
                          WHERE  status = '1'); 

提前致谢

原因:

如果您想将内部查询与 IN 一起使用,则内部查询应该 return 只有 1 列。

解法:

从内部查询中删除 status。同样在变量 $brandname 周围使用单引号 '

$sql = "SELECT brand,name,product_id 
        FROM product_description 
        where brand = '$brandname'
              and product_id in 
                    (SELECT product_id FROM product where status='1')";

无需在子查询中获取 status。试试这个 -

$sql = "SELECT 
           brand,name,product_id 
        FROM product_description 
        WHERE brand ='$brandname' 
        AND product_id in (SELECT product_id FROM product where status='1')";

需要将您的查询更新为

"SELECT brand,name,product_id FROM product_description where brand 
= '$brandname' and product_id in (SELECT product_id FROM product where 
status='1')";
  1. 如果变量 $brandname 不是整数,则需要用单引号将其括起来
  2. 您的子查询返回多个值,因此您只需要 select product_id

我不能肯定地说没有错误或查询输出,但我认为你不应该在子查询中选择 "status",因为你正在检查特定的 product_id 在 product_id 和状态的结果集中。尝试重写子查询,以便只选择 product_id。

加入你的桌子。

$sql = "SELECT d.brand, d.name, d.product_id
FROM   product_description AS d
JOIN   product AS p ON d.product_id = p.product_id AND p.status = '1'
WHERE  d.brand = '$brandname'";

最佳做法是使用 prepared statements