16 Stimmen

Mysql-Auswahl aus zwei Tabellen

Kann mir jemand sagen, wie ich Daten aus zwei Tabellen auswählen kann, ohne eine Verknüpfung verwenden zu müssen?

Etwa so:

SELECT t1.*, 
       t2.*
  FROM table1 t1, 
       table2 t2

Klarstellung Ich habe diese zwei Tabellen, die die gleichen Felder haben. IE: table1 enthält Daten aus den Jahren 2011 und table2 enthält Daten aus dem Jahr 2012. Ich möchte sie alle erhalten.

Weitere Klarstellung: Die gewünschte Ergebnismenge kann erzeugt werden durch:

(SELECT tr.full_name, tr.headlines, tr.content, tr.stamp, tr.person_key
 FROM tbl_transactions tr
          JOIN persons p ON p.person_key = tr.person_key
          JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
 WHERE t.team_key = '')
UNION
(SELECT tr.full_name, tr.headlines, tr.content, tr.stamp, tr.person_key
 FROM tbl_transactions_bk_2012 tr
          JOIN persons p ON p.person_key = tr.person_key
          JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
 WHERE t.team_key = ''

und der Auftraggeber möchte wissen, ob es alternative Möglichkeiten gibt, dies zu beschleunigen ("Ich habe versucht, mit UNION zwischen diesen abfragen. aber die abfragegeschwindigkeit betrug 0,1887 sekunden. das ist ziemlich langsam.")

(@Jetoox: Wenn dies nicht Ihre Absicht ist, bearbeiten Sie bitte Ihre Frage und stellen Sie sie klar).

29voto

mathematical.coffee Punkte 54672

Fügen Sie einfach die Verknüpfungsbedingung in die WHERE-Klausel ein:

SELECT t1.*, t2.*
FROM table1 t1, table2 t2
WHERE t1.id = t2.t1_id

Das ist allerdings eine innere Verbindung.

UPDATE

Nachdem ich mir Ihre Fragen angesehen habe: In diesem speziellen Fall gibt es keine Beziehung zwischen tbl_transactions y tbl_transactions_bk_2012 (d.h. die Verknüpfung über person_key ist sinnlos, weil es keine Beziehung zwischen den beiden Tabellen gibt, so wie z.B. tbl_transactions und persons miteinander verbunden sind).

Dann sollten Sie die UNION Ansatz. Versuchen Sie, die erste Abfrage mit der zweiten zu verknüpfen, indem Sie entweder JOIN o FROM xx, yy WHERE xx.id=yy.id ist bedeutungslos und wird Ihnen nicht die gewünschten Ergebnisse liefern.

Übrigens, schreiben Sie in Zukunft Ihre aktuelle Anfrage bzw. Ihren aktuellen Versuch in Ihren Beitrag - wie Sie sehen können, verhindert das, dass Sie Antworten erhalten, die nicht zu Ihrer Frage passen (wie mein erster Versuch).

12voto

Sie wollen UNION .

(SELECT tr.full_name, tr.headlines, tr.content, tr.stamp, tr.person_key
 FROM tbl_transactions tr
          JOIN persons p ON p.person_key = tr.person_key
          JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
 WHERE t.team_key = '')
UNION
(SELECT tr.full_name, tr.headlines, tr.content, tr.stamp, tr.person_key
 FROM tbl_transactions_bk_2012 tr
          JOIN persons p ON p.person_key = tr.person_key
          JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
 WHERE t.team_key = ''

4voto

silly Punkte 7615
select t1.*, t2.* from table1 t1, table2 t2
where t1.fkey = t2.pkey

2voto

jyotiprakash Punkte 2086
select t1.* , t2.*
from t1, t2 where t1.id=t2.id;

0voto

Wenn Sie die UNION-Abfrage verwenden, können Sie auch Indizes zu allen Spalten hinzufügen, die Sie zum Verbinden und Filtern verwenden, um die Leistung zu verbessern

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X