2017-05-23 2 views
1

Ich habe folgendes Problem: I table1 mit mehreren Spalten col1 durch col2 eine Tabelle haben:Abfragen einer Tabelle für eine uservariable Liste

+------+------+ 
| col1 | col2 |  
+------+------+ 
| 1 | 4 | 
| 2 | 4 | 
| 3 | 4 | 
| 4 | 5 | 
+------+------+ 

Jetzt muss ich alle Einträge col1 -Einträge mit vier in col2 , für die ich benutze:

SELECT @col2fours := col1 FROM table1 WHERE col2 = 4; 

Jetzt habe ich eine table2, wo ich die Zeilen festlegen möchten, wo col3 eine der val hat ue gespeichert in @col2fours. Dazu verwende ich:

SELECT * ID FROM table2 WHERE col3 IN @col2fours; 

Dies funktioniert nicht. Ich habe bereits versucht = und having anstelle von in sowie Group_concat. Für mich hat noch nichts funktioniert.
Ich möchte dies direkt in mySQL tun, da die Datenbank auf einem Server liegt und ich die Zugriffe auf die Datenbank so weit wie möglich reduzieren möchte. Das eigentliche Problem hat etwas mehr Tabellen als 2;). Schätzen Sie jede Eingabe, danke.

+1

erkläre das –

+0

Ich verstehe deine Frage nicht. –

Antwort

1

Sie Sub-Abfrage wie dieser direkt

SELECT * FROM table2 WHERE col3 IN (SELECT col1 FROM table1 WHERE col2 = 4); 
+0

Danke, hatte so etwas nicht gedacht;) –

1

Dieser Ansatz verwenden können, ist ein No-Go, da in MySQL gibt es keinen Array-Datentyp ist, so dass eine Variable nur 1 Wert zu einer Zeit halten kann.

Verwenden Sie einfach eine Unterabfrage oder sich die erwarteten Ergebnisse zu erzielen: ‚Jetzt habe ich eine table2, wo ich die Zeilen festlegen möchten, wo col3 einer der Werte in @ col2fours gespeichert hat‘

SELECT * FROM table2 WHERE col3 IN (SELECT col1 FROM table1 WHERE col2 = 4) 

SELECT table2.* FROM table2 
INNER JOIN table1 ON table2.col3=table1.col1 
WHERE table1.col2 = 4 
+0

Danke! Ich denke, die Unterabfrage ist der richtige Weg für mich, der Beitritt scheint für mein Problem ein bisschen unpassend zu sein, aber danke für deine Hilfe! –

Verwandte Themen