从子查询到列的选择

时间:2017-05-15 08:25:11

标签: mysql sql subquery

所以说我有一个名为Activity context的表格,其中包含orders列和一个名为zip_code的表格。 provinces包含字段provincesnamestarting_zip(表示开始和结束zip之间的所有邮政编码都属于此省)。

我需要选择数千个订单并包含他们要运送到的省份的名称。我尝试过这样的事情:

ending_zip

我也尝试过:

SELECT orders.*, p.name
FROM orders, (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) p
WHERE...

此外:

SELECT orders.*, p.name
FROM orders
JOIN (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) p
WHERE...

无论我做什么,我都会收到如下错误:

SELECT orders.*, (SELECT name FROM provinces 
    WHERE order.zip_code >= provinces.starting_zip 
    AND order.zip_code <= provinces.ending_zip LIMIT 1) as name
FROM orders
WHERE...

有意义的是,subselect不具备从主选择访问信息的范围,但是我知道如何让它工作?

1 个答案:

答案 0 :(得分:0)

为什么不这样做?

Loads variables from a YAML/JSON files dynamically from within a file or from a directory recursively during task runtime. 

我真的不明白为什么这应该在SELECT orders.*, ( SELECT name FROM provinces WHERE orders.zip_code >= provinces.starting_zip AND orders.zip_code <= provinces.ending_zip LIMIT 1 ) as name FROM orders WHERE... 声明中。无论如何,您只需选择名称列

<强>更新

您是否看到我在子查询中更改了表名? FROM语句如下所示:

FROM

但是FROM orders 子句看起来像这样:

WHERE

我在查询中将其更改为:

WHERE order.zip_code >= provinces.starting_zip 
AND order.zip_code <= provinces.ending_zip