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')";
- 如果变量
$brandname
不是整数,则需要用单引号将其括起来
- 您的子查询返回多个值,因此您只需要 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
我想在 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')";
- 如果变量
$brandname
不是整数,则需要用单引号将其括起来 - 您的子查询返回多个值,因此您只需要 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