Ich habe 2 SQL-Abfragen mit unterschiedlichen Ergebnismengen. Sie kamen zwar beide aus derselben Tabelle, aber die zweite Abfrage hängt von einer anderen Tabelle ab. Wie kann ich diese 2 Abfragen kombinieren, ohne UNION zu verwenden?MySQL - Ist es möglich, zwei Abfragen ohne Verwendung von UNION zu kombinieren?
Dies ist meine Abfrage.
SELECT tmp.id, tmp.title , tmp.description, asst.smallUrl, b1.paramVal as duration, b2.paramVal as clips, asst.fileUrl as video
FROM listDb.baseData tmp
INNER JOIN listDb.tag tag ON tag.baseDataId= tmp.id and tag.tag = 'service app' and tag.status = "active"
INNER JOIN listDb.baseParam b0 ON b0.baseDataId= tmp.id
and ((b0.paramName = "role"
and (b0.paramVal = "public"))
or ((select count(*) from listDb.baseParam temp
where temp.baseDataId= tmp.id and paramName = "role")=0))
or (b0.paramName = "role" and b0.paramVal = "public" and tmp.owner = 27)
LEFT JOIN listDb.baseParam b1 ON b1.baseDataId= tmp.id and b1.paramName="duration" and b1.status = "active"
LEFT JOIN listDb.baseParam b2 ON b2.baseDataId= tmp.id and b2.paramName=" itemCount" and b2.status = "active"
LEFT JOIN listDb.baseParam b3 ON b3.baseDataId= tmp.id and b3.paramName="previewUrl" and b3.status = "active"
LEFT JOIN assetDb.baseData asst ON asst.id = b3.paramVal and asst.status = "active"
WHERE tmp.status = "active" and tmp.application = "template" and tmp.role = "public"
UNION
SELECT tmp.id, tmp.title , tmp.description, asst.smallUrl, b1.paramVal as duration, b2.paramVal as clips, asst.fileUrl as video
FROM listDb.baseData tmp
INNER JOIN listDb.tag tag ON tag.baseDataId= tmp.id and tag.tag = 'service app' and tag.status = "active"
INNER JOIN listDb.baseParam b0 ON b0.baseDataId= tmp.id
and ((b0.paramName = "role"
and (b0.paramVal = "private" or b0.paramVal = "" and b0.paramVal != "public"))
or ((select count(*) from listDb.baseParam temp
where temp.baseDataId= tmp.id and paramName = "role")=0))
or (b0.paramName = "role" and b0.paramVal = "public" and tmp.owner = 27)
LEFT JOIN listDb.baseParam b1 ON b1.baseDataId= tmp.id and b1.paramName="duration" and b1.status = "active"
LEFT JOIN listDb.baseParam b2 ON b2.baseDataId= tmp.id and b2.paramName="itemCount" and b2.status = "active"
LEFT JOIN listDb.baseParam b3 ON b3.baseDataId= tmp.id and b3.paramName="previewUrl" and b3.status = "active"
LEFT JOIN assetDb.baseData asst ON asst.id = b3.paramVal and asst.status = "active"
INNER JOIN listDb.checkRestricted cr ON cr.baseDataId= tmp.id and cr.status = "active" and cr.owner = 27
WHERE tmp.status = "active" and tmp.application = "template" and tmp.role = "private"
gibt es einen Unterschied zwischen Abfragen außer diesem '(b0.paramVal = "private" oder b0.paramVal = "" und b0.paramVal! = "öffentlich") '? –
Die zweite Abfrage erhält die Ergebnisse basierend auf einer anderen Tabelle .. in der Tabelle checkRestricted. INNER JOIN listDb.checkRestricted cr ON cr.baseDataId = tmp.id und cr.status = "active" und cr.owner = 27 –