sql >> Database teknologi >  >> RDS >> Mysql

MySQL-korreleret underforespørgsel i JOIN-syntaks

Svaret på dit spørgsmål er nej, det er ikke muligt at referere til korrelationsnavne, som du gør. Den afledte tabel produceres af din indre forespørgsel, før den ydre forespørgsel begynder at evaluere joinforbindelser. Så korrelationsnavnene som t , tp og u er ikke tilgængelige for den indre forespørgsel.

For at løse dette vil jeg anbefale at bruge den samme konstante heltalsværdi i den indre forespørgsel og derefter forbinde den afledte tabel i den ydre forespørgsel ved at bruge en reel betingelse i stedet for 1=1 .

SELECT t.ticketid, u.userid, t.fullname, u.loginapi_userid, t.email,
  tp.subject, tp.contents, a.PhoneNumber, a.Location, a.Extension,
  a.BusinessUnit, a.Department
FROM swtickets t
 INNER JOIN swticketposts tp ON (t.ticketid = tp.ticketid)
 INNER JOIN swusers u ON (t.userid = u.userid)
 LEFT OUTER JOIN (
  SELECT cfv.typeid,
    MIN(CASE cfv.customfieldid WHEN 1 THEN cfv.fieldvalue END) AS 'PhoneNumber',
    MIN(CASE cfv.customfieldid WHEN 3 THEN cfv.fieldvalue END) AS 'Location',
    MIN(CASE cfv.customfieldid WHEN 5 THEN cfv.fieldvalue END) AS 'Extension',
    MIN(CASE cfv.customfieldid WHEN 8 THEN cfv.fieldvalue END) AS 'BusinessUnit',
    MIN(CASE cfv.customfieldid WHEN 9 THEN cfv.fieldvalue END) AS 'Department'
  FROM swcustomfieldvalues cfv
  WHERE cfv.typeid = 2458
  GROUP BY cfv.typeid
  ) AS a ON (a.typeid = t.ticketid)
WHERE t.ticketid = 2458;


  1. MYSQL vælg de sidste 3 rækker, sorter efter ASC

  2. Korrekthed og begrænsninger

  3. T-SQL tirsdag #33:Trick Shots:Skema Switch-A-Roo

  4. SQL Server Konverter heltal til binær streng