2016-03-31 19 views
1

Hey Ich habe ein Problem, die richtigen Informationen aus der Datenbank mit den Anfragen bekommen, die ich benutze, ich habe die folgende Datenbank:Wählen Sie Zeilen mit JOIN eine Unterabfrage

Deck

PK - ID - int 
Deckname - varchar(255) 

Karte

PK - ID  - int 
PK Cardname - varchar(255) 
Cardvalue - int 
Amount  - int 

Nun, wenn ich die folgende Abfrage:

SELECT * FROM Card WHERE ID IN (SELECT ID FROM Card WHERE Cardname = 'pickachu'); 

Wo die Kartentabelle die folgenden Werte:

1 pickachu  50  1 
1 charmender 55  2 
2 squirtle  65  2 

ich diese Zeilen zurück:

=
1 pickachu  50  1 
1 charmender 55  2 

ID 1, da pickachu ID 1 hat, verwende ich, dass alle Karten zu erhalten, habe ID 1.

Nun möchte ich auch den Decknamen (ID 1 in der Kartentabelle bezieht sich auf die ID 1 im Deck).

lässt So übernehmen wir die folgenden Werte in Deck haben:

1 myFirstDeck 
2 mySecondDeck 

ich jetzt diese im Gegenzug erhalten möchten:

1 pickachu  50  1 myFirstDeck 
1 charmender 55  2 myFirstDeck 

ich versucht haben, zu erhalten diese die folgende Abfrage verwenden:

SELECT Card.*, Deck.Deckname FROM Card INNER JOIN Deck ON (Card.ID = Deck.ID) WHERE Card.Cardname = 'pickachu'; 

Aber das gibt mir nur Pickachu, und nicht Charmender, die ich auch will. Wie kann ich diese Abfrage anpassen, um die gewünschten Ergebnisse zu erhalten?

+0

Nun, Ihre Klausel sagt, dass Sie nur diejenigen wollen, wo Cardname Pikachu ist, so dass Sie natürlich nur diejenigen bekommen. Warum haben beide Tabellen ID-Spalten, die miteinander verknüpft sind? Die ID ist normalerweise eindeutig. Sie sollte beispielsweise deck_id sein, wenn sie mit der Decktabelle verknüpft ist. –

Antwort

1

Die sub-query kann nicht entfernt werden.

SELECT c.*, d.Deckname 
FROM Card as c INNER JOIN Deck as d ON c.ID = d.ID 
WHERE c.ID IN (SELECT ID FROM Card WHERE Cardname = 'pickachu'); 
+0

Danke, diese Lösung funktioniert! –

Verwandte Themen