2013-02-27 16 views
8

quello che ho: La struttura prossimo:dati scegliere tra due tabelle in MySql

table_zero
->id(primaria con incremento automatico)
-> altro

table_1
->id(chiave esterna tabella id zero)
-> varchar (80) Valore di esempio: (aahellobbb)
-> one_field

table_2
->id(chiave esterna per tabella zero id)
-> varchar (160) Valore di esempio: (aaececehellobbb)
-> other_field

Quello che voglio: di ricerca e ottenere un (id, varchar) array contenente tutte le partite con il LIKE '% str%' sul campo varchar. Ad esempio, se eseguo una ricerca con la stringa "ciao" ... dovrei ottenere entrambi i valori di esempio con i rispettivi ID. Questi ID saranno sempre diversi, poiché si riferiscono a una PRIMARY KEY.

Cosa ho provato: Ho provato con UNION ALL ma non funziona con LIMITS nel mio esempio.

risposta

9

Utilizzando UNION è possibile ottenere più volte righe con lo stesso ID. Che ne dici di usare LEFT JOIN?

Se ho capito la tua domanda:

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%' 
+0

Grazie per la risposta. Funziona bene per me ma ottengo un paio di due campi chiamati "nome". Ogni coppia ha un valore NULL e la stringa corrispondente. È normale? So che è dovuto alla ricerca del tavolo doppio ... ma sembra strano. Grazie per la risposta;) –

+2

Se desideri che solo un campo nei risultati contenente la stringa corrispondente, puoi utilizzare 'COALESCE (table_1.varchar_field, table_2.varchar_field) AS matched_string' invece di' table_1.varchar_field, table_2.varchar_field' –

+0

semplicemente meraviglioso! : D –

2

provare questo

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%' 
+0

Grazie, ma quello di Frostys era quello definitivo, D Vota comunque! –

+0

Uso eccessivo della memoria, selezionare 200.000 righe limite 0, 10 in 20 secondi quando l'ordine è intento di una colonna. –

1
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%' 
Problemi correlati