5

2 つのテーブルがあり、両方のプライマリ識別子が「id」という名前を使用しているとします。これら 2 つのテーブルとの結合を実行したい場合id、前のテーブルと結合したいテーブルのエイリアスをどのように作成すればよいでしょうか?

例えば:

SELECT * FROM `sites_indexed` LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` WHERE `url` LIKE :url

これで、site_id は とリンクすることになっていsites_indexed.idます。idただし、 の行を表すactualはとindividual_data同じタイトルsites_indexedです。

id個人的には、物事の一貫性を保つため、すべてに名前を使用するのが好きです. ただし、サーバー側でスクリプトを作成すると、混乱する可能性があります。

例えば

$var = $result['id'];

前述のクエリを考えると、これはインタプリタを混乱させませんか?

とにかく、これはどのように達成されますか?

4

4 に答える 4

11

「SELECT*」ですべてのフィールドを選択する代わりに、必要に応じてASでエイリアスを作成し、必要な各フィールドに明示的に名前を付ける必要があります。例えば:

SELECT si.field1 as si_field1,
       si.field2 as si_field2,
       ind_data.field1 as ind_data_field1
  FROM sites_indexed as si
  LEFT JOIN individual_data as ind_data 
         ON si.id = ind_data.site_id 
 WHERE `url` LIKE :url

次に、結果セットでエイリアス名を参照できます。

于 2012-08-15T22:18:51.493 に答える
5

このスレッドは古く、同じ問題があったため見つけました。今、私はより良い解決策を持っています。Paul McNett と antun によって与えられた回答では、すべてのフィールドをリストする必要がありますが、場合によってはこれが不可能 (リストするにはフィールドが多すぎる) ため、* を保持し、必要なフィールドのみにエイリアスを付けることができます (通常、同じフィールドを持つフィールド)。名前と相互にオーバーライドされます)。

方法は次のとおりです。

    SELECT *, t.myfield as myNewName 
FROM table t ... continue your query

カンマを追加することで、必要なだけエイリアスを追加できます。

于 2014-09-30T22:40:30.603 に答える
3

この式を使用すると、列id (テーブルsites_indexedから) およびid2 (テーブルindividual_dataからの列idのエイリアス)で結果が得られます。

SELECT t1 . *, t2 . * FROM sites_indexed t1
LEFT JOIN (select id as id2, other_field1, other_field2 FROM individual_data) t2 ON t1.id = t2.site_id WHERE your_statement
于 2016-06-15T08:41:42.073 に答える
2

問題は、* ワイルドカードを使用していることです。クエリで列名を明示的にリストする場合は、エイリアスを指定できます。

SELECT `sites_indexed`.`id` AS `sites_indexed_id`,
       `individual_data`.`id` AS `individual_data_id`
       FROM `sites_indexed` 
       LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` 
       WHERE `url` LIKE :url

次に、エイリアスを介してそれらを参照できます。

$var = $result['sites_indexed_id']; $var_b = $result['individual_data_id'];

于 2012-08-15T22:28:48.577 に答える