Fråga : unioner och subqueries för mySQL invecklade

Ytterligare en gång mitt vara besvärad studsas av behovet att bearbeta multipeln ”alternativ” using unioner. All den kommer från en defekt databas strukturerar, I " M sure, men det är inte förhandlingsbar på denna time.

Essentially föreställer att parallell två strukturerar inom den samma DBEN - för varje bordlägga, där var versioner för arc_ (arkivera), av det bordlägger också för de äldre rekorden, för att optimera sökanden på de mer strömrekorden. Anyhoo denna är neither här nor där - utfärda är nu handstilqueries mot BÅDA behov för sets.

I per svar ögonblickligen, så mig förmiddagen som går precis att skriva detta ut här, i hoppen, att handstil ut ifrågasätta ger precis mig en ledtråd till svaret och som är väl, om något sakkunnigt snille ut där (den AngelIII, I-förmiddagen som ser DIG!) ser detta i tid, väl bonus!

Oh och I-_need_ som gör detta i en singelmySQLquery, även om I-förmiddaghandstil som den ut i logiskt ”kliver”, långt optimizeren ought att att närma sig lösning av rekordet set.

1. finna alla meddelanden var titeln = ”hälsningar ELLER alla arc_messages var titeln = ”hälsning (union)
2. sammanfoga på mottagareare `för `för något meddelande; sammanfoga på arc_recipient `-
3 för `för någon arc_message. få LEGITIMATIONEN från för `det mottagareare för `eller arc_recipient `- rekordet för `. Denna LEGITIMATION är ett utländskt stämm till ENDERA `- deltagare`ELLER arc_student `för `, men vi vet inte which.
4. sammanfoga på `- deltagare`ELLER arc_student `för `och ge mig name
So using denna LEGITIMATION:

message - > meddelandet - > deltagaren ELLER arc_student
arc_message - > arc_notificationen - > deltagare- ELLER för arc_student

It känselförnimmelser gillar mig önskar något som är lik:
select M.*,
för S.name
from (
väljer message.*, notification.*
från message
sammanfogar meddelande på message.notification_id = notification.row_id
, var message.title = 'union

för hello'

väljer arc_message.*, arc_notification.*
från arc_message
sammanfogar arc_notification på arc_message.notification_id = arc_notification.row_id
var arc_message.title = 'hello'
), som M

join (
väljer student.name
från student
var student.row_id = M.student_id <-- okänd union

för kolonnen M.student_id

väljer arc_student.name
från arc_student
var arc_student.row_id = M.student.id <-- okänd kolonn M.student_id
) som S


but M är naturligtvis ut ur räckviddinsida som denna join.

My peka är, mig inte önskar måste lämnat sammanfogar deltagaren, arc_student yttersida, därför att därefter jag förmiddagen som lämnas med två, bordlägger att I-förmiddagen som går constantly måste ifnull (student.name, arc_student.name) som studentName etc.…., och stunden som den verkar nätt trivialt i detta förenklat exempel, det, går att få smutsig i den ingen verkliga (större) query.
Is där riktigt långt göra resultatet (student_id) från den första subqueryen (den meddelande-/arc_messageunionen) i räckvidd för deltagaren/arc_student sammanfogar?

It skulle är enkel, om det fanns en korrelation mellan arc_messagen - > arc_student och meddelandet - > deltagaren, men tyvärr det är precis inte case.
I kunde sätta deltagaren/den arc_student unionen som en annan inre meddelande/arc_message för subselect, men därefter jag skulle måste att göra den två gånger, skulle mig inte? En gång för meddelande och en gång för arc_message och det rättvist verkar något liknande som den skulle är överflödig och frambringar en kartesisk arg product.

Hmmm, den inre subselecten är kanske inte en dåligaidé….,
Related lösningar för class= ": för mySQL - unioner, subqueries och joins

Svar : unioner och subqueries för mySQL invecklade

Fånga är att, om en deltagare (row_id) syns i både deltagare och arc_student MEN MED OLIKT KÄNT… väl, dig går att få en arg produkt.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
välj M.*, S.name
från
(
  välj message.*, notification.*
  från meddelande
  sammanfoga meddelandet på message.notification_id = notification.row_id
  var message.title = ”hälsningar
union
  välj arc_message.*, arc_notification.*
  från arc_message
  sammanfoga arc_notificationen på arc_message.notification_id = arc_notification.row_id
  var arc_message.title = ”hälsningar
) som M
sammanfoga (
  välj student.row_id, student.name
  från deltagare
union
  välj arc_student.row_id, arc_student.name
  från arc_student
) som S PÅ M.student_id = S.row_id
Andra lösningar  
 
programming4us programming4us