Sequel Proを使用すると、次の2つのテーブルがあります。
Table1
Name Year x y
John Smith 2010 10 12
Adam Jones 2010 8 13
John Smith 2011 7 15
Adam Jones 2011 9 14
etc.
そして
Table2
Name Year z
Smith John Smith John 2010 27
Jones Adam Jones Adam 2010 25
Smith John Smith John 2011 29
Jones Adam Jones Adam 2011 21
etc.
基本的に、Table2の名前は同じであり、姓と名が入れ替わってから1回繰り返されます。そのため、Table1の名前はTable2の名前にあります(「John Smith」は「Smith John Smith John」にあります)。内部結合を実行し、Table2のz値をTable1の他の値に接続して、次のようなものを取得します。
Name x y z
John Smith 10 12 27
Adam Jones 8 13 25
そのために、このクエリを実行しました。
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%Table2.Name%" and Table1.Year=Table2.Year
しかし、私はこれを出力として得ました:
Name Year x y z
以上です。見出しはありますが、行はありません。私が間違っていることはわかりません...おそらくlike演算子を使用している方法に関係しているのではないかと思いますが、わかりません。どんな助けでも大歓迎です。
ちょっと変わったデータモデルは別として、テーブルをLIKE
部分(table1.nameはtable2.nameの一部である必要があり、逆ではない)で方向転換しているので、追加する必要がありますフィールドのnameではなく、valueに対するパーセント名前を引用しないことを意味します。
SELECT table1.*, table2.z
FROM table1
INNER JOIN table2
ON table2.name LIKE CONCAT('%', table1.name, '%')
AND table1.year = table2.year
クエリが正しくありません。列のコンテンツはabcdTable2.Nameefgh
。これは正しいでしょう:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like "%" + Table2.Name+ "%" and Table1.Year=Table2.Year
このクエリは、より大きなテーブルに対しては非常に遅くなりますが、名前だけで結合している場合、すぐに重複するためテーブルが実際に大きくなることはできないと思います。
これを試して:
Select Table1.*, Table2.z
From Table1
Inner join Table2
On Table1.Name like Concat('%',Table2.Name,'%') and Table1.Year=Table2.Year
クエリでTable2.Name
を含む文字列を検索します(定数に似ています)
名前に参加する提案は非常に悪いので、同じ名前の人が2人いる場合はどうですか??!そのため、このために主キーと外部キーが必要です。