2012-08-09 154 views
0

我需要使用子查询命名查询中的列。我写了一个声明,在该SELECT部分子查询,但我收到以下错误消息(来自笨返回):MySQL语句在select语句中的子查询

错误编号:1064

您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的正确语法手册 '(SELECT ps_url_name FROM product_selects WHERE ps_id = '1'),psc_opt_2 A' 位于第1行

SELECT 
    `psc_opt_1` AS (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1'), 
    `psc_opt_2` AS (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '2'), 
    `psc_opt_3` AS (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '3'), 
    `psc_opt_4` AS (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '4'), 
    `psc_opt_5` AS (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '5') 
FROM (`product_stock_control`) 
WHERE `psc_prod_id` = '5' 

文件名:车型/ products_model.php

行号:602

任何想法是什么问题呢?

+0

有PHP的功能,让你从一个表中提取列名....你有没有检查出来?它看起来像你在一些PHP代码中执行这个 – CheeseConQueso 2012-08-09 16:58:58

回答

2

AS是列别名运算符,这意味着您选择这些变量作为标识符。您不能使用操作员通过查询识别变量。

参考http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

相反,你需要扭转你如何使用别名操作符,像这样:

SELECT 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1') AS `psc_opt_1`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '2') AS `psc_opt_2`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '3') AS `psc_opt_3`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '4') AS `psc_opt_4`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '5') AS `psc_opt_5` 
FROM (`product_stock_control`) 
WHERE `psc_prod_id` = '5' 

理想情况下,你应该避免使用子查询(尤其是在这种情况下)以避免表锁定开销。

0

正确格式为

(SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1') As `psc_opt_1` 
0

你试试这个:

SELECT 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1') as `psc_opt_1`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '2') as `psc_opt_2`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '3') as `psc_opt_3`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '4') as `psc_opt_4`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '5') as `psc_opt_5` 
FROM (`product_stock_control`) 
WHERE `psc_prod_id` = '5' 
0

你想命名此列psc_opt_1到psc_opt_1或什么什么,你到底要什么?

命名会是这样的:

SELECT 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1') AS `psc_opt_1`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '2') AS `psc_opt_2`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '3') AS `psc_opt_3`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '4') AS `psc_opt_4`, 
    (SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '5') AS `psc_opt_5` 
FROM (`product_stock_control`) 
WHERE `psc_prod_id` = '5'