限定しりとり

すいません。SQL文の質問があります。

文字列を結合したカラムでJoinしたいのですが、SQLの文法について質問させてください。

添付画像の通りですが、
CONCAT(id, id2) と文字列を結合して、新たに id3とします。
そのid3同士でJoinして購入商品や購入店を表示させたいです。

select
*

from sample1

join sample2
on sample1.concat(id, id2) = sample2.concat(id, id2)

こちらではエラーでした・・・。

お手数をおかけしますがよろしくお願いいたします。

「文字列を結合したカラムでJoinしたい」の質問画像

A 回答 (3件)

なにも考えずにやるならこう


select
*
from sample1
join sample2
on concat(sample1.id, sample1.id2) = concat(sample2.id, sample2.id2)

しかしこれはインデックスが聞かないのであまりお勧めできません
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます!
ベストアンサーに選ばせていただきました。

お礼日時:2020/04/21 09:39

concat は 文字列を連結する関数です。


CONCAT(id, id2) というのは id列の文字列とid2列の文字列を連結します。
id や id2 は、テーブル名.id テーブル名.id2 の「テーブル名.」を省略したものです。
省略しても一意に決まる場合はいいのですが、同じ列名が複数ある場合は、省略できません。
sample1等のテーブル名を付けるのは、列に対してです。



それで、本当に「idとid2を継げたもの」が正しいのでしょうか?
こういうテーブルにしたときに、よく使われるのは sample1.id=sample2.id and sample1.id2=sample2.id2 といった、
それぞれの列の組合せが同じ、という条件です。
これでは何か不都合があるのでしょうか?
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます!

お礼日時:2020/04/21 09:38

SQLの種類によって書き方が変わります


また元テーブルを拡張していいかによって効率も変わります
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます!

お礼日時:2020/04/21 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!