2012-08-09 123 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'