2017-06-16 8 views
-3

ich diese SQL-Tabellen haben:Auswählen von Daten aus mehreren Tabellen SQL

User_table: -id_user; -name; -(etc);

X_table: -id_x; -id_user; -(etc);

Z_table: -id_Z; -id_user; -(etc);

Y_table: -id_Y; -id_user; -(etc);

ich alle Daten von X auswählen möchten, Z, Y Tabellen, wie lautet die korrekte Syntax? Ist es mit mehr als 2 Tabellen möglich?

+0

Hallo und willkommen zu StackOverflow. Hier versuchen wir, Code zu korrigieren, oder Leute, die Fragen stellen, die selbst mit Beispielen schwer zu lösen sind. Dies ist eine Frage, die einfach zu lösen ist, aber dies ist kein kostenloses Coding-Service-Web, daher empfehle ich Ihnen, [wie Sie in S. Overflow fragen können] (http://www.wikihow.com/Ask-a-Question) zu lesen -on-Stack-Overflow) und [wie man inner join sql w3schools zu Ihrer spezifischen Frage macht] (https://www.w3schools.com/sql/sql_join_inner.asp). Hoffe das hilft, habe einen schönen Tag und mache deine Hausaufgaben alleine. –

+0

(Weil Ihre Frage Mangel an essentiellem Wissen über SQL beinhaltet, entstanden durch das Nicht-Lesen von Grundlagen, wird es nach unten geroutet) –

Antwort

0

Wenn Sie möchten mehr Tabellen auswählen, sollten Sie aus 'nachziehen' in verwenden ...

zum Beispiel:

select U.id_user, X.id_x 
from User_table U join X_table X on U.id_user = X.id_user 
group by ... 
+0

Gefällt mir das? 'SELECT * FROM User_tabelle INNER JOIN X_tabelle JOIN Y_table JOIN Z_table WHERE X_table.id_user = Benutzertabelle.id_user AND Y_table.id_user = Benutzertabelle.id_user AND Z_table.id_user = Benutzertabelle.id_user' –

0

Teil 1 - Joins und Unions

Diese Antwort umfasst:

Teil 1 Verbinden von zwei oder mehr Tabellen mit einem inneren Join (Weitere Informationen finden Sie im Wikipedia-Eintrag) Verwendung von a Union Query Linke und rechte äußere Joins (diese stackOverflow Antwort ist ausgezeichnet, um Arten von Joins zu beschreiben) Intersect Abfragen (und wie sie reproduzieren, wenn Ihre Datenbank sie nicht unterstützt) - das ist eine Funktion von SQL-Server (siehe Info) und ein Teil des Grundes, warum ich diese ganze Sache überhaupt geschrieben habe. Teil 2 Unterabfragen - was sie sind, wo sie verwendet werden können und worauf zu achten ist Cartesian tritt AKA bei - Oh, das Elend! Es gibt mehrere Möglichkeiten, Daten aus mehreren Tabellen in einer Datenbank abzurufen. In dieser Antwort werde ich die ANSI-92 Joinsyntax verwenden. Dies kann sich von anderen Tutorials unterscheiden, die die ältere ANSI-89-Syntax verwenden (und wenn Sie mit 89 vertraut sind, mag viel weniger intuitiv erscheinen - aber alles, was ich sagen kann, ist es zu versuchen), da es viel einfacher ist zu verstehen, wenn die Abfragen komplexer werden. Warum es benutzen? Gibt es einen Leistungszuwachs? Die kurze Antwort ist nein, aber es ist einfacher zu lesen, sobald man sich daran gewöhnt hat. Es ist einfacher, Abfragen anderer Benutzer zu lesen, die diese Syntax verwenden.

Ich werde auch das Konzept einer kleinen Caryard verwenden, die eine Datenbank hat, um zu verfolgen, welche Autos es zur Verfügung hat. Der Besitzer hat Sie als seinen IT-Computer-Mann eingestellt und erwartet, dass Sie in der Lage sind, ihm die Daten, die er verlangt, aus dem Nichts fallen zu lassen.

Ich habe eine Reihe von Nachschlagetabellen erstellt, die von der Final Table verwendet werden. Dies wird uns ein vernünftiges Modell zur Verfügung stellen. Um zu beginnen, werde ich meine Abfragen gegen eine Beispieldatenbank ausführen, die die folgende Struktur hat. Ich werde versuchen, über häufige Fehler nachzudenken, die gemacht werden, wenn ich anfange und zu erklären, was mit ihnen schief läuft - und natürlich zeigen, wie man sie korrigiert.

Die erste Tabelle ist einfach eine Farbliste, so dass wir wissen, welche Farben wir auf dem Parkplatz haben. [pre]

mysql> create table colors(id int(3) not null auto_increment primary key, 
    -> color varchar(15), paint varchar(10)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> show columns from colors; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(3)  | NO | PRI | NULL | auto_increment | 
| color | varchar(15) | YES |  | NULL |    | 
| paint | varchar(10) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
3 rows in set (0.01 sec) 

mysql> insert into colors (color, paint) values ('Red', 'Metallic'), 
    -> ('Green', 'Gloss'), ('Blue', 'Metallic'), 
    -> ('White' 'Gloss'), ('Black' 'Gloss'); 
Query OK, 5 rows affected (0.00 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

mysql> select * from colors; 
+----+-------+----------+ 
| id | color | paint | 
+----+-------+----------+ 
| 1 | Red | Metallic | 
| 2 | Green | Gloss | 
| 3 | Blue | Metallic | 
| 4 | White | Gloss | 
| 5 | Black | Gloss | 
+----+-------+----------+ 
5 rows in set (0.00 sec) 
The brands table identifies the different brands of the cars out caryard could possibly sell. 

mysql> create table brands (id int(3) not null auto_increment primary key, 
    -> brand varchar(15)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> show columns from brands; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(3)  | NO | PRI | NULL | auto_increment | 
| brand | varchar(15) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.01 sec) 

mysql> insert into brands (brand) values ('Ford'), ('Toyota'), 
    -> ('Nissan'), ('Smart'), ('BMW'); 
Query OK, 5 rows affected (0.00 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

mysql> select * from brands; 
+----+--------+ 
| id | brand | 
+----+--------+ 
| 1 | Ford | 
| 2 | Toyota | 
| 3 | Nissan | 
| 4 | Smart | 
| 5 | BMW | 
+----+--------+ 
5 rows in set (0.00 sec) 

[/ pre]

Der Modelltisch verschiedene Arten von Autos ohne Abdeckung wird es einfacher sein wird für diese Arten unterschiedliche Auto zu benutzen, anstatt tatsächliche Fahrzeugmodelle.

[pre]

mysql> create table models (id int(3) not null auto_increment primary key, 
    -> model varchar(15)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> show columns from models; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(3)  | NO | PRI | NULL | auto_increment | 
| model | varchar(15) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

mysql> insert into models (model) values ('Sports'), ('Sedan'), ('4WD'), ('Luxury'); 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

mysql> select * from models; 
+----+--------+ 
| id | model | 
+----+--------+ 
| 1 | Sports | 
| 2 | Sedan | 
| 3 | 4WD | 
| 4 | Luxury | 
+----+--------+ 
4 rows in set (0.00 sec) 

[/ pre]

Und schließlich all diese Tabellen zu binden, die Tabelle, die alles zusammenhält. Das ID-Feld ist tatsächlich die eindeutige Chargennummer, die zum Identifizieren von Autos verwendet wird.

[pre]

mysql> create table cars (id int(3) not null auto_increment primary key, 
    -> color int(3), brand int(3), model int(3)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> show columns from cars; 
+-------+--------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+-------+--------+------+-----+---------+----------------+ 
| id | int(3) | NO | PRI | NULL | auto_increment | 
| color | int(3) | YES |  | NULL |    | 
| brand | int(3) | YES |  | NULL |    | 
| model | int(3) | YES |  | NULL |    | 
+-------+--------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

mysql> insert into cars (color, brand, model) values (1,2,1), (3,1,2), (5,3,1), 
    -> (4,4,2), (2,2,3), (3,5,4), (4,1,3), (2,2,1), (5,2,3), (4,5,1); 
Query OK, 10 rows affected (0.00 sec) 
Records: 10 Duplicates: 0 Warnings: 0 

mysql> select * from cars; 
+----+-------+-------+-------+ 
| id | color | brand | model | 
+----+-------+-------+-------+ 
| 1 |  1 |  2 |  1 | 
| 2 |  3 |  1 |  2 | 
| 3 |  5 |  3 |  1 | 
| 4 |  4 |  4 |  2 | 
| 5 |  2 |  2 |  3 | 
| 6 |  3 |  5 |  4 | 
| 7 |  4 |  1 |  3 | 
| 8 |  2 |  2 |  1 | 
| 9 |  5 |  2 |  3 | 
| 10 |  4 |  5 |  1 | 
+----+-------+-------+-------+ 
10 rows in set (0.00 sec) 

[/ pre]

Diese uns genügend Daten geben wird (hoffentlich) die folgenden Beispiele von verschiedenen Arten von Verknüpfungen zur Deckung ab und auch genügend Daten geben zu machen sie lohnen sich.

So in die Grube davon will der Chef die IDs aller Sportwagen wissen, die er hat.

Dies ist eine einfache Zwei-Tabellen-Join. Wir haben eine Tabelle, die das Modell und die Tabelle mit dem verfügbaren Lagerbestand identifiziert. Wie Sie sehen können, beziehen sich die Daten in der Modellspalte der Autotabelle auf die Modellspalte der Autotabelle, die wir haben. Nun wissen wir, dass die Modelltabelle eine ID von 1 für Sport hat, also schreiben wir den Join. [vor]

select 
    ID, 
    model 
from 
    cars 
     join models 
      on model=ID 
Verwandte Themen