0

I need to use subqueries to name columns in a query. I have written a statement with subqueries in the SELECT section, but I am getting the following error message (returned from Codeigniter):

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT ps_url_name FROM product_selects WHERE ps_id = '1'), psc_opt_2 A' at line 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'

Filename: models/products_model.php

Line Number: 602

Any ideas what is going wrong?

1
  • there are php functions that allow you to extract column names from a table.... have you check that out? it looks like you are executing this within some php code Commented Aug 9, 2012 at 16:58

4 Answers 4

2

AS is a column alias operator, meaning you are selecting these variables as an identifier. You cannot use the operator to identify a variable with a query.

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

Instead, you'll need to reverse how you use the alias operator like so:

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'

Ideally, you should avoid using subqueries (especially in this case) to avoid table-locking overhead.

Sign up to request clarification or add additional context in comments.

Comments

0

correct format is

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

Comments

0

Did you try this:

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'

Comments

0

Do you want to name this columns psc_opt_1 to psc_opt_1 or what what do you exactly want to?

Naming would be like this:

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'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.