我有一个查询,该查询将来自另一个查询的值附加为子选择。
我需要根据所附的列(customer_name)过滤结果(订单)。
SELECT
id,
(
SELECT name
FROM
customers
WHERE
id = orders.customer_id
) AS `customer_name`
FROM
orders
WHERE
`customer_name` LIKE '%smith%'
出于某种原因,尽管有名为smith的客户,此查询未返回任何结果。
我不能使用join
来加入name
,此示例是我的查询的简化,我的原始查询要求“附加”多个值在同一张桌子上。
我得到Unknown column 'customer_name' in 'where clause'
复制:http://sqlfiddle.com/#!9/1f28834/2
预期结果是属于客户smith
的所有订单。
在示例中,订单1,2,3
答案 0 :(得分:1)
我已经解决了这个问题,方法是使用子查询按ID进行搜索
SELECT
id,
(SELECT name FROM customers WHERE id = orders.customer_id) AS `customer_name`
FROM
orders
where
customer_id in (select id from customers where name like '%smith%');
答案 1 :(得分:0)
在子查询中使用where条件
SELECT *, (
SELECT name
FROM customers
WHERE id = orders.customer_id
) AS `customer_name`
FROM
orders
WHERE
orders.customer_id IN (
SELECT id
FROM customers
WHERE customers.name like '%smith%'
)