sql >> Databasteknik >  >> RDS >> Mysql

mysql conditional join beror på en kolumn

du kan inte villkorligt skapa kopplingar över tabeller. Det bästa sättet att göra är att använda LEFT JOIN och använder ditt CASE i din SELECT påstående. Du måste ha angett vanliga kolumner som du vill visa,

SELECT *,
        (CASE notification_base.type
            WHEN 'photo'
            THEN photo.columnName1
            ELSE post.ColumnName1
        END) as ColumnName1,
        (CASE notification_base.type
            WHEN 'photo'
            THEN photo.columnName2
            ELSE post.ColumnName2
        END) as ColumnName2
FROM notification_action
    INNER JOIN notification_base
        ON notification_action.not_base_id = notification_base.id
    INNER JOIN notification_sub
        ON notification_action.not_base_id = notification_sub.not_base_id
    INNER JOIN photo
        ON photo.id = notification_base.object_id
    INNER JOIN post
        ON post.id = notification_base.object_id
WHERE notification_sub.user_id = 3
    AND notification_sub.lastShowDate < notification_action.creationDate;



  1. Hitta partitioneringskolumnen för en partitionerad tabell i SQL Server (T-SQL)

  2. Kan inte dekryptera med pgcrypto från AES-256-CBC men AES-128-CBC är OK

  3. Android:Hur begär jag en markör för att uppdatera ListView efter att ha raderat databasraden?

  4. 6 vanliga felscenarier för MySQL och MariaDB, och hur man åtgärdar dem