-1

私のデータベースには 2 つのテーブルがあり、1 つは personalfirstteaminfo と呼ばれ、2 つ目は status-kids です。

2 つのテーブル間の共通の列は player_id です

2 つのテーブルを結合し、各行の age 列も作成するクエリを作成したいと思います。

今私は動作するこのクエリを使用しました - しかし、私はpersonalfirstteamテーブルのデータしか取得しません。status-kids 列 (ステータスと子供) が表示されない

SELECT p.* ,TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age FROM personalfirstteaminfoasp自然結合 (select s.* from status-kidsas s) as T

何か案は?このようにしようとすると

選択しpます。sFROM personalfirstteaminfoas p, status-kidsas swhere p.player_id = s.player_id

必要な値は返されますが、player_id 列が 2 回表示されます。

ありがとうございました。

4

2 に答える 2

0

使用できます

SELECT *, TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age 
FROM personalfirstteaminfo as p 
natural join `status-kids`

ご注意ください:

  • テーブルに名前を付けずに simple * を使用する
  • 不要なサブセレクトを省略
  • テーブル名status-kidsにはダッシュが含まれているため、エスケープする必要があります。

自然結合の場合、MySQL は次のことを行います。

  • 冗長な列が削除され、標準 SQL に従って列の順序が正しくなります。
  • 最初に、結合された 2 つのテーブルの共通列を最初のテーブルで発生する順序で結合します。
  • 2 番目に、最初のテーブルに固有の列 (そのテーブルで発生する順序)
  • 3 番目に、2 番目のテーブルに固有の列 (そのテーブルで発生する順序)
  • 2 つの共通の列を置き換える単一の結果列は、合体操作を使用して定義されます。- つまり、2 つの t1.a と t2.a の場合、結果の単一の結合列 a は a = COALESCE(t1.a, t2.a) として定義されます。 NULL THEN V1 ELSE V2 END)

出典: MySQL マニュアル、結合構文

于 2014-09-24T17:27:30.950 に答える
0

2 番目のテーブルから列を選択しませんでした - 試してください:

SELECT p.*, t.* ,TIMESTAMPDIFF(YEAR,birthday,CURDATE()) as age 
FROM personalfirstteaminfo as p natural join (select s.* from status-kids as s) as T
于 2014-09-24T16:28:03.217 に答える