0

サブクエリを使用してクエリの列に名前を付ける必要があります。セクションにサブクエリを含むステートメントを書きましたSELECTが、次のエラー メッセージが表示されます (Codeigniter から返されます)。

エラー番号: 1064

SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の '(SELECT ps_url_nameFROM product_selectsWHERE ps_id= '1'), psc_opt_2A'付近で使用する正しい構文を確認してください。

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'

ファイル名: models/products_model.php

ライン番号: 602

何がうまくいかないのですか?

4

4 に答える 4

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'

理想的には、サブクエリの使用を避ける必要があります (特にこの場合)、テーブル ロックのオーバーヘッドを回避する必要があります。

于 2012-08-09T16:57:18.283 に答える
0

正しいフォーマットは

(SELECT `ps_url_name` FROM `product_selects` WHERE `ps_id` = '1') As `psc_opt_1` 
于 2012-08-09T16:58:20.463 に答える
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'
于 2012-08-09T16:59:01.450 に答える
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'
于 2012-08-09T17:03:08.093 に答える