テーブル名を省略して「h.id」とかって書きたいの

このQ&Aのポイント
  • テーブル名を省略して「h.id」とかって書きたいのですが、修正方法を教えてください。
  • SQL文でLEFT JOINの後にテーブル名が来ない場合の修正方法を教えてください。
  • 以下のSQL文で、「hoge」「red」をそれぞれ「h」「r」として書きたいのですが、どう修正したら良いでしょうか?
回答を見る
  • ベストアンサー

テーブル名を省略して「h.id」とかって書きたいの

以下SQL文で、「hoge」「red」をそれぞれ、「h」「r」として、「h.id」「r.red_id」とかって書きたいのですが、 どう修正したら良いのでしょうか? (コピペしているので、LEFT JOINの後にテーブル名が来ないとき、どうしたら良いか分かりません) SELECT id, century, tom, best, center, dragon  FROM (   SELECT hoge.id, c.century, hoge.tom, hoge.best, hoge.center, u.dragon FROM hoge     LEFT JOIN usa u ON hoge.usa_id = u.id    LEFT JOIN century c ON hoge.century_id = c.century_id   UNION ALL   SELECT red.red_id, c.century, red.red_title, red.best, red.center, u.dragon FROM red    LEFT JOIN usa u ON red.usa_id = u.id    LEFT JOIN century c ON red.century_id = c.century_id  ) as PIYO

  • re999
  • お礼率61% (476/777)
  • MySQL
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

こゆこと? SELECT id, century, tom, best, center, dragon  FROM (   SELECT h.id, c.century, h.tom, h.best, h.center, u.dragon FROM hoge h    LEFT JOIN usa u ON h.usa_id = u.id    LEFT JOIN century c ON h.century_id = c.century_id   UNION ALL   SELECT r.red_id, c.century, r.red_title, r.best, r.center, u.dragon FROM red r    LEFT JOIN usa u ON r.usa_id = u.id    LEFT JOIN century c ON r.century_id = c.century_id  ) as PIYO

re999
質問者

お礼

回答ありがとうございました。 >こゆこと? はい

その他の回答 (1)

  • sava1
  • ベストアンサー率66% (2/3)
回答No.2

私のエスパーとしてのレベルが足りないので申し訳ないのですが まず、質問の意味が分かりません そしてなにがしたいのか、なぜそうしたいのかが、全く見えませんが 私のつたない第六感をたよりに書きますと SELECT id, century, tom, best, center, dragon FROM ( SELECT h.id, c.century, h.tom, h.best, h.center, u.dragon FROM hoge h --ここにhを追加 LEFT JOIN usa u ON h.usa_id = u.id LEFT JOIN century c ON h.century_id = c.century_id UNION ALL SELECT r.red_id, c.century, r.red_title, r.best, r.center, u.dragon FROM red r --ここにrを追加 LEFT JOIN usa u ON r.usa_id = u.id LEFT JOIN century c ON r.century_id = c.century_id ) as PIYO こういうことでしょうか? テーブル名の後に略称を入れただけです。 ただ、こういう書き方をしても元の式と全く返される結果は変わらず。 また、内部処理も全く改善しないので なんの意味もないような気がするのですが…。 あと、常識すぎて指摘されるのも不愉快かと思いますが一応断っておきます。 (仮、テーブルを作成してコードが実行できることは確かめております。) 掲示板の仕様上コードに全角スペースが混入する可能性があります。 そのままコピーして実行してもエラーが出る場合はメモ帳などで全角スペースを半角スペースに変換してお使いください。 もし「こんな当たり前のこと聞いてねーよ、氏ね」と思ったらご容赦下さい。

re999
質問者

お礼

回答ありがとうございました。 >こういうことでしょうか? >テーブル名の後に略称を入れただけ テーブル名の略称の入れ方を知りたかったです

関連するQ&A

  • UNIONで、特定カラムだけ結合前のカラム名を取得

    以下のようなSQLがあるとき、「best」カラムだけ、後で利用する際、「セレクト1」「セレクト2」何れのカラムから(どちらのテーブルから)取得したか知りたいのですが、どうすれば良いでしょうか? <SQL文例> SELECT id, tom, best, center, dragon  FROM (   SELECT m.id, m.tom, m.best1, m.center, u.dragon FROM main m ←セレクト1    LEFT JOIN usa u ON m.usa_id = u.id   UNION ALL   SELECT s.red_id, s.red_title, s.best2, s.center, u.dragon FROM sub s ←セレクト2    LEFT JOIN usa u ON s.usa_id = u.id  ) as PIYO <希望> 「id, tom, best, center, dragon」ではなく、 「id, tom, best1, center, dragon」+「id, tom, best2, center, dragon」で取得したい <質問> ・SQL生成の方法がおかしいのでしょうか? ・「セレクト1」「セレクト2」を2回実行して、どーにかして足せば良いのでしょうか? ・そもそもSQL側で足す、という考えが間違っているのでしょうか? この場合は2回実行して、スクリプト側で処理すべきなのでしょうか? <最終的にやりたいこと> ・「main」「sub」テーブルよりLIKE検索を行い、それぞれでヒットした該当レコードを取得したい ※UNIONを利用し、検索結果を両テーブルより取得表示するとこまでは出来たのですが、「main」「sub」何れから取得したか判断出来ないため、そこからリンクが貼れず、再考しています

    • ベストアンサー
    • MySQL
  • SELECT出来るのにDELETE出来ないのはなぜ

    MySQLで下記SELECTレコードを削除したいと思い、 DELETEへ変えたら文法エラーになります。 SELECT * FROM `piyo` AS a LEFT JOIN `hoge` AS c ON a.`hoge_id` = c.`hoge_id` WHERE c.`x_id` =13 DELETE * FROM `piyo` AS a LEFT JOIN `hoge` AS c ON a.`hoge_id` = c.`hoge_id` WHERE c.`x_id` =13 どう書けば良いでしょうか?

    • ベストアンサー
    • MySQL
  • 2テーブルが同じユーザテーブル参照するときの結合

    2つのテーブルで、同じユーザテーブルを参照してデータ取得したいのですが、 どうやって結合すれば良いのでしょうか? ■概要 ・ユーザがアクションに挑戦すると、結果を表示 ・その際、「アクション作成者」と「アクション挑戦者(ユーザ)」を表示したい ※「作成者」「挑戦者」は、同じ「user」テーブルで管理したい ■3テーブル ・「result」「action」「user」 ・「result」「action」テーブルには、それぞれ「user_id」カラムがある ・「result」テーブルには、「action_id」カラムがある。1対多? ■知りたいこと ・一気にまとめて一覧として取得する方法 ・最終的に「結果」と、「result」「action」それぞれに対応した「user」テーブルの「name」カラムを取得したい ■試してみたこと ・これだと「挑戦者名」が取得できない       SELECT *        FROM result r         LEFT JOIN `action` a ON r.`action_id` = a.`id`         LEFT JOIN `user` u ON r.`user_id` = u.`id` ・これだと「挑戦者」のユーザIDしか取得できない       SELECT *,a.user_id AS actionuser_id        FROM result r         LEFT JOIN `action` a ON r.`action_id` = a.`id`         LEFT JOIN `user` u ON a.`user_id` = u.`id`

    • ベストアンサー
    • MySQL
  • 複数テーブルからLIKE検索を行いたいのですが、う

    複数テーブルからLIKE検索を行いたいのですが、うまくいかないので教えてください ■やりたいこと ・一つのキーワードで、MAINテーブル「hoge」カラムと、SUBテーブル「hoge」カラムを検索して、該当したレコードを表示したい ■テーブル構成 ・MAIN … 「id」「main1」「hoge」… ・SUB… 「sub_id」「main_id」「sub1」「hoge」… ・1つの「id」に対して、対応する「sub_id」が複数(「id」1は一つだけ。対応する「sub_id」1は複数あります) ■試したこと1 SELECT a.* , r.* FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」カラムが2つ入ります) ■試したこと2 SELECT a.* , r.hoge as rhoge FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」と「rhoge」カラムになります) ■試したこと3 FROMで2箇所指定するのかと思ったのですが、 SELECT a.* , r.* FROM (main a,sub r) LEFT JOIN r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) 結果は、#1066 - Not unique table/alias: 'r'になります ■試したこと4 LEFT JOINがいらないのかと思い、削除したら、2件ヒットするはずなのに、たくさんヒットしてしまいます ■質問 欲しいのは、キーワード検索した際、該当カラムにヒットした数だけのレコードなのですが、どうすれば良いのでしょうか? ■例 ・東京で検索 ・MAINテーブル「hoge」カラム(2レコード)で2ヒット ・SUBテーブル「hoge」カラム(3レコード)で3ヒット ・ヒットした該当5レコードを取得したい

    • ベストアンサー
    • MySQL
  • LEFT JOINが2つあるSQL文でANDの意味

    ■下記SQL文の意味を教えてください SELECT a.*, b.being_name FROM alive a  LEFT JOIN being b ON a.hoge_id = b.id  LEFT JOIN call c ON c.call_id = a.hoge_id   AND f.hoge_id = 12  WHERE f.hoge_id = 12 OR b.id = 12 ※12の部分は動的に切り替わります ・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか? ・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか? >SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2 >「AND」は2つの条件式の論理積 ・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

    • ベストアンサー
    • MySQL
  • テーブルの結合について

    以下の二つを実行すると、2 の方がかなり速いのですが理由が分かりません。 分かる方教えてもらっていいですか? DBはMYSQLでInoDBです。 ちなみに Aは1万件、B は10万件ほど 1 のSQL SELECT * FROM A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) B ON A.id = B.XXX WHERE ・・・ GROUP BY A.id 2 のSQL (SELECT * FROM A ・・・ GROUP BY ID ) A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) ON A.ID = B.XXX.ID

  • 3つのテーブルを結ぶSQLの書き方

    お世話になります。 3つのテーブルを結びつけるSQLの書き方がわかりません。ご指導お願いします。 [TableA][ID] [TableB][ID] [TableC][ID] [TableA]と[TableB]をLEFT JOINでつなぐ。 上の結果を[TableA][ID]と[TableC][ID]でInner joinでつなぐ。 つまり・・・ SELECT TableA.ID,TableB.ID FROM TabelA LEFT JOIN TableB→この結果 SELECT TableA.ID,TableB.ID TableC.ID From この結果 INNER JOIN TableC ON TableA.ID = TableC.ID こんな感じのことをやりたいのですが、記述の方法がわかりません。 どなたかお知恵をお貸しください。

  • 表結合の処理速度(負荷)

    ご覧頂きありがとうございます。 今回の質問ですが、MySQLの表結合時の処理速度(負荷)についてお聞きします。 SELECT abcd.name, hoge.age FROM abdc, hoge WHERE abcd.id = hoge.id; SELECT abcd.name, hoge.age FROM abcd LEFT JOIN hoge ON abcd.id = hoge.id; 上記のいわゆるJOINとJOIN(省略)?になりますが、どちらが処理速度的に優秀なのでしょうか? 可能であればどういった処理が走っているのかも御存じであれば教えて頂きたいです。 参考URLでも構いませんので、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブル結合について、下記SQLをANSI結合の書き方で表したい。

    テーブル結合について、下記SQLをANSI結合の書き方で表したい。 select * from (select key from A union select key from B union select key from C) X, A,B,C where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+) このSQLをANSI結合の記述で書きたいのですが、 (+)での結合文になれておらず試行錯誤しております。 下記のようなのかなとは模索しておりますが、 手元に実行環境がなくわかりません。 また、要所気付く点などありましたら、ご指摘願います。 select A.*, B.*, C.* from (select key from A union select key from B union select key from C) X, LEFT JOIN A ON X.key=A.key LEFT JOIN B ON X.key=B.key LEFT JOIN C ON X.key=C.key

  • 3つのテーブルの処理について

    下記のようなテーブルがあったとして、 テーブルAを基準に考えたいのですが、、、、 テーブルAに付加する形でテーブルBのデータのidカウント数が最も少なく、idが同じもの中でdate日が一番新しいデータを表示し、古いものから並べかえかつテーブルCにidがあるものは一番最後にくるという風に並べかえたいのですが、無理でしょうか? 現在下記のようなSQLを考えていますが、うまくいかないです。。 select * from A left join(select id,case when count(id)=0 then 0 else count(id) end AS cnt FROM B group by id order by date) as b on A.id=b.id left join(select id from C) as c on A.id=c.id order by c.id desc,b.cnt; エラー↓ in the GROUP BY clause or be used in an aggregate function テーブルA id | name | comment| 1 あ   おい 2 い   えい 3 か   テス テーブルB id | event | date | 1 test1 2005/1/4 2 test1 2005/1/4 1 test2 2005/3/4 2 test2 2005/3/4 1 test3 2005/5/4 テーブルC id | 1 理想の結合データ id | name | comment| cnt | date | 3 か   テス 0    2 い   えい 2  2005/3/4  1 あ   おい 3 2005/5/4