2009-06-23 6 views
-1

Angenommen, ich habe eine Tabelle mit ID und Marke Spalten.MySQL Match Marke von Artikel, die Sie nicht Marke von kennen?

Angenommen, ich habe einen Gegenstand. Ich weiß, dass die ID 300 ist, aber das ist alles, was ich weiß. Gibt es eine Möglichkeit, eine Abfrage alle Elemente mit der gleichen Marke wie das Element zu ziehen, oder muss ich es in 2 Abfragen brechen und zuerst die Marke des Elements 300 auswählen?

Danke.

+0

Sie könnten ein bisschen mehr spezifisch über Ihr Schema sein wollen - nicht die Tabelle (id, Marke) ein Element definieren, so dass es ein Gegenstand Tisch? Ist ID die ID der Marke? –

Antwort

3

Wenn ich Sie richtig verstanden habe, könnte die Verwendung eines Subselect der einfachste Weg sein, um dieses Problem zu lösen.

SELECT * FROM mytable WHERE brand = (SELECT brand FROM mytable WHERE id = 300); 
+0

Ich denke, ich werde deine Antwort verwenden, obwohl ich denke, dass Eriks Antwort kühler ist. Ich denke, dass es für dich einfacher ist, später zurückzuschauen und zu verstehen, was es tut. –

0
select id 
from item 
where brand = (select brand from item where id = 300) 
3

Sie können die Tabelle mit sich selbst verbinden:

select 
    a.* 
from 
    brands a 
    inner join brands b on 
     a.brand = b.brand 
where 
    b.id = 300 
+0

Euer Hangy ist beides, ich frage mich, was man da leistet ... Ich würde deinen Weg gehen, weil es keine Unterabfrage gibt? –

+1

@John: In diesem Fall wird der Optimierer sie genau gleich machen. Wenn Sie eine Unterabfrage verwenden, die von der Superabfrage abhängig ist (z. B. wo Marke = (wählen Sie b.brand from mytable2 b wobei b.id = a.id)), dann wäre die Verknüpfung _generally_ schneller. Ich bevorzuge Joins in diesem Fall, weil sie für mich leichter zu lesen sind. – Eric

0
select * from products where category in (select category from products where Id = 300) 
Verwandte Themen