Frage : mySQL erschwerte Anschlüße und Subqueries

Noch einmal wird mein Verstand durch die Notwendigkeit, mehrfache „Alternativen“ using Anschlüße zu verarbeiten verwirrt. Aller er kommt von einer fehlerhaften Datenbankstruktur, I " m sure, aber der ist nicht an diesem time.

Essentially sich vorstellen zwei parallele Strukturen innerhalb des gleichen DBs verkäuflich - für jede Tabelle, gibt es auch arc_ (Archiv) Versionen von der Tabelle für die älteren Aufzeichnungen, Suchen auf den aktuellen Sätzen zu optimieren. Anyhoo, dieses ist weder hier noch dort - die Ausgabe schreibt Fragen gegen BEIDE sets.

I Notwendigkeit eine Antwort jetzt sofort, also werde ich gerade dieses hier, in die Hoffnungen heraus schreiben, dass die Frage gerade ausschreiben mir einen Anhaltspunkt zur Antwort gibt und gut wenn irgendein sachverständiges Genie heraus dort (AngelIII, betrachte ich SIE!) sieht dieses in der Zeit, wohle Prämie!

Oh und das I _need_, zum dies in einer einzelnen mySQL Frage zu tun, obwohl ich Schreiben es heraus in den logischen „Schritten“ bin, die Weise der Optimierer sollen sich dem Lösen der Aufzeichnung set.

1. nähern finden alle Mitteilungen in denen Titel = „hallo“ ODER alle arc_messages, wo Titel = „hallo“ (Anschluss)
2. für jede mögliche Mitteilung, auf `Empfänger `verbinden; für jedes mögliches arc_message auf `verbinden, das arc_recipient `
3. die Identifikation von der `aufnahmefähigen `oder `arc_recipient `Aufzeichnung erhalten. Diese Identifikation ist ein fremder Schlüssel ENTWEDER zum `Kursteilnehmer `ODER `zum arc_student `, aber wir kennen which.
4. nicht using diese Identifikation, verbinden auf `Kursteilnehmer `ODER `arc_student `und geben mir das name

So:

message - > Mitteilung - > Kursteilnehmer ODER arc_student
arc_message - > arc_notification - > Kursteilnehmer ODER arc_student

It glaubt, wie ich etwas wie wünsche:
select M.*, S.name
from
(
wählen message.*, notification.*
vom message
sich anschließen Mitteilung auf message.notification_id = notification.row_id
, wo message.title = 'hello'< Br/>
union

arc_message.* vorwählen, arc_notification.*
vom arc_message
verbinden arc_notification auf arc_message.notification_id = arc_notification.row_id
wo arc_message.title = 'hello'< Br/>) vor, als M

join (
student.name
vom student
in dem student.row_id = M.student_id < vorwählen-- unbekanntes Spalte M.student_id

union

arc_student.name
vom arc_student
in dem arc_student.row_id = M.student.id < vorwählen-- unbekannte Spalte M.student_id
) während S


but selbstverständlich M aus Bereich innerhalb dieses join.

My Punktes heraus ist, ich möchten nicht Kursteilnehmer, arc_student Außenseite, weil dann ich mit zwei Tabellen, die ich gelassen werde gehe muss ifnull ständig (student.name, arc_student.name) sich anschließen nach links müssen ist, als studentName usw.…. und während es in diesem vereinfachten Beispiel recht trivial scheint, wird es unordentlich im realen (grösseren) query.

Is dort wirklich keine Weise erhalten, das Resultat (student_id) vom ersten Subquery (der Mitteilung-/arc_messageanschluß) im Bereich für den Kursteilnehmer zu bilden/arc_student verbindet?

It würde einfach sein, wenn es eine Wechselbeziehung zwischen arc_message - > arc_student und Mitteilung - > Kursteilnehmer gab, aber leider ist das gerade nicht das case.

I könnte den Kursteilnehmer/den arc_student Anschluss als ein anderer Subselect innerhalb der Mitteilung/des arc_message setzen, aber andererseits würde ich es zweimal tun müssen, nicht wurde ich? Einmal für Mitteilung und einmal für arc_message und die scheint gerade wie es würde sein überflüssig und ein kartesisches Kreuz product.

Hmmm zu erzeugen, möglicherweise ist der innere Subselect nicht eine schlechte Idee….

Antwort : mySQL erschwerte Anschlüße und Subqueries

Der Fang ist dass, wenn ein Kursteilnehmer (row_id) im Kursteilnehmer und arc_student ABER MIT UNTERSCHIEDLICHEM NAMEN… gut erscheint, Sie werden ein Querprodukt erhalten.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
M.*, S.name vorwählen
von
(
  message.*, notification.* vorwählen
  von der Mitteilung
  Mitteilung auf sich anschließen message.notification_id = notification.row_id
  wo message.title = „hallo“
Anschluss
  arc_message.*, arc_notification.* vorwählen
  vom arc_message
  arc_notification auf verbinden arc_message.notification_id = arc_notification.row_id
  wo arc_message.title = „hallo“
) als M
verbinden (
  student.row_id, student.name vorwählen
  vom Kursteilnehmer
Anschluss
  arc_student.row_id, arc_student.name vorwählen
  von arc_student
) als S AUF M.student_id = S.row_id
Weitere Lösungen  
 
programming4us programming4us