0

これは、私が期待したように機能しない問題です。これがクエリです

SELECT  `table_name` 
FROM    `category` 
WHERE   `id` = ( SELECT `category_id` 
                 FROM    `assets` 
                 WHERE   `id` = '24028'  )

photosテーブル名として使用する必要がある値を返しています。

ここに画像の説明を入力

最終値を取得する必要がある場所から。だから私はこのようにそれを使用しました:

SELECT * 
FROM   ( 
         SELECT  `table_name` 
         FROM    `category` 
         WHERE   `id` =  ( SELECT `category_id` 
                           FROM   `assets` 
                           WHERE `id` = '24028'
                          )
       )

しかし、これはエラーを返します

#1248 - すべての派生テーブルには独自のエイリアスが必要です

だから、それを次のように使用しました、

SELECT * 
FROM  (
        SELECT `table_name` 
        FROM   `category` 
        WHERE  `id` = (  SELECT `category_id` 
                         FROM   `assets` 
                         WHERE  `id` = '24028' )
       ) as `photos`

しかし、ここでも前の画像と同じ値が返されます。しかし、私が期待しているのは、次の値を返す必要があるということです:

SELECT * FROM `photos`

ここで、photos はサブクエリによって返される値です。

4

2 に答える 2

4

一見すると、動的な「FROM」テーブル名を使用してクエリを作成しようとしています。これを行う唯一の方法は、SQL をコードで作成するか、準備済みステートメントを使用することです。

DELIMITER //; 
SET @s := CONCAT('SELECT * FROM ', (SELECT  `table_name` FROM `category` WHERE `id` = (SELECT `category_id` FROM `assets` WHERE `id` = '24028'));

PREPARE stmt FROM @s;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;
//
于 2013-05-15T16:07:06.203 に答える
0

次に、コメントの回答ごとに、可能な「table_name」を1つしか扱っていない場合は、それに直接参加してみませんか

select 
      A.ID,
      A.Category_ID,
      C.Category,
      TP.*
   from
      assets A
         JOIN Category C
            on A.ID = C.ID
         JOIN tbl_photo TP
            on A.ID = TP.ID
   where
      A.ID = '24028'
于 2013-05-15T18:11:02.863 に答える