私が持っているもの:次の構造:
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では機能しません。
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%'
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%'
これを試して
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%'