我想搜索product_description
中与某品牌匹配的所有记录,以及其他表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');
提前致谢
答案 0 :(得分:2)
<强>原因:强>
如果要将其与IN
一起使用,则内部查询应仅返回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')";
答案 1 :(得分: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')";
答案 2 :(得分: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
不是整数product_id
括在单引号中
folder2
答案 3 :(得分:0)
我不能说没有错误或输出查询,但我认为您不应该在子查询中选择“status”,因为您正在检查特定product_id是否在两者的结果集中product_id和状态。尝试重写子查询,以便只选择product_id。
答案 4 :(得分:0)
加入你的桌子。
$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