0

私が使用している(ただし設計していない)データベースは、あるテーブルの行の主キー(id)が別のテーブルの行の主キー内に含まれているという奇妙な構造を持っています。たとえば、table1にIDが「933」の行がある場合、table2には、そのようなIDが付いているが、接頭辞が「something933」の単語が付いた行があります。

SELECT * FROM table1, table2 WHERE table1.id = table2.id

これが基本クエリですが、table1.idの内容は「933」のようであり、table2.idは「something933」のようであるため、WHERE table1.id = table2.something+idのようなものが必要です。

これらのテーブルを単一のクエリで結合する方法はありますか?

4

3 に答える 3

2

はい、できますが、これは本当に悪いデザインです。また、クエリの形式が間違っているため、実際には結合条件を指定し、WHERE句を使用しないでください。結合条件を指定せずに実行している方法で実行すると、テーブルのデカルト積が得られ、条件をフィルタリングします。したがって、次のようなものを使用できます。

SELECT * FROM table1
INNER JOIN table2 ON CONCAT('something', table1.id) = table2.id

もちろん、テーブル1のインデックスを結合に使用することはできなくなります(したがって、設計が不適切な部分です)。

可能であれば、table2のこれらのIDを更新して、プレフィックスを削除します。

于 2013-02-22T22:42:47.343 に答える
0

私はあなたがLIKEという言葉を使いたいと信じています:

SELECT * FROM table1, table2 WHERE table2.id LIKE CONCAT('%', table1.id, '%');

同様の質問と回答があります:

MySQL LIKE句でユーザー変数を使用するにはどうすればよいですか?

于 2013-02-22T22:42:25.463 に答える
0
SELECT * FROM table1, table2 WHERE table2.id LIKE '%'+table1.id
于 2013-02-22T22:43:19.700 に答える