web-dev-qa-db-ja.com

MySQLの2つのテーブルからデータを選択する

私が持っているもの:次の構造:

table_zero
-> id(PRIMARY with auto increment)
->その他

table_1
-> id(テーブルのゼロIDへの外部キー)
-> varchar(80)値の例:(aahellobbb)
-> one_field

table_2
-> id(テーブルのゼロIDへの外部キー)
-> varchar(160)値の例:(aaececehellobbb)
-> other_field

欲しいもの: varcharフィールドのLIKE '%str%'とのすべての一致を含む(id、varchar)配列を検索して取得します。たとえば、「hello」文字列で検索すると、両方のサンプル値とそれぞれのIDが取得されます。これらのIDはPRIMARY KEYへの参照であるため、常に異なるものになります。

私が試したこと:UNION ALLで試したが、この例ではLIMITSでは機能しません。

10
Mark Tower

UNIONを使用すると、同じIDの行が数回取得される場合があります。 LEFT JOINの使用についてはどうですか?

あなたの質問を理解したら:

SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
  LEFT JOIN table_1 ON table_zero.id = table_1.id
  LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
  OR table_2.varchar_field LIKE '%str%'
13
Frosty Z
SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
  LEFT JOIN table_1 ON table_zero.id = table_1.id
  LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
  OR table_2.varchar_field LIKE '%str%'
2
Amal joseph

これを試して

SELECT *
FROM 
(
SELECT table_zero.id AS ID, table_1.varchar_field AS field
FROM table_zero
  JOIN table_1 ON table_zero.id = table_1.id
WHERE table_1.varchar_field LIKE '%str%'
UNION
SELECT table_zero.id, table_2.varchar_field  AS field
FROM table_zero
  JOIN table_2 ON table_zero.id = table_2.id
) tbl
WHERE 
tbl.field LIKE '%str%'
2
JudgeProphet