SQL --分支取數據

需求分析mysql

1.寫一條SQL語句,返回一個list,list中存放的對象有個屬性是type(有三種狀況),需求:根據這個type關聯不一樣的表。
sql

常規思路數據庫

先寫SQL取到這個list,在判斷list中每一個對象的type,再根據不一樣的type再去數據庫表裏查詢一次。
ui

常規思路弊端code

若是返回的是一個對象,這樣分步作是沒有問題的;可是這個地方返回的是一個list,在外層的list裏面套個循環來判斷每一個對象的type,在根據type不一樣,分別去聯合不一樣的表查數據,這種想法很明顯的不是最佳方案,假設list的數據成千上百條,
對象

在套個for循環,查詢時間可想可知。for循環

解決思路class

mysql裏面的case when
循環

示例以下數據

SELECT
    tm.LINK_CONTENT_ID,
    tm.LINK_CONTENT_TYPE,
    tm.SEND_USER_ID,
    tui.USER_IMG,
    tui.NICKNAME,
    tm.ADD_TIME,
    tm.LINK_OBJ_ID,
    tm.LINK_OBJ_IMG,
    tm.LINK_OBJ_NAME,
    tm.MESSAGE_CONTENT,
    tm.RECEIVE_USER_ID,
    tm.SUPER_CMMT_ID,
    tm.SUPER_CMMT_CONTENT,
    tm.ROOT_CMMT_ID,
    tm.READ_FLAG,
    CASE
WHEN LINK_CONTENT_TYPE = '01' THEN
    (
        SELECT
            CONCAT(
                (
                    SELECT
                        t_person.COMPANY
                    FROM
                        t_person
                    WHERE
                        t_person.PERSON_ID = tm.LINK_OBJ_ID
                ),
                '||',
                (
                    SELECT
                        CONCAT(
                            (
                                SELECT
                                    t_person.JOB_POSITION
                                FROM
                                    t_person
                                WHERE
                                    t_person.PERSON_ID = tm.LINK_OBJ_ID
                            )
                        )
                )
            )
        FROM
            t_person
        WHERE
            t_person.PERSON_ID = tm.LINK_OBJ_ID
    )
WHEN LINK_CONTENT_TYPE = '02' THEN
    (
        SELECT
            t_hr.MOTTO
        FROM
            t_hr
        WHERE
            t_hr.HR_ID = tm.LINK_OBJ_ID
    )
WHEN LINK_CONTENT_TYPE = '03' THEN
    (
        SELECT
            t_enterprise.ENTERPRISE_SUMMARY
        FROM
            t_enterprise
        WHERE
            t_enterprise.ENTERPRISE_ID = tm.LINK_OBJ_ID
    )
ELSE
    ''
END AS linkObjInfo
FROM
    t_message tm,
    t_user_info tui
WHERE
    tm.SEND_USER_ID = tui.USER_ID
AND tm.RECEIVE_USE_FLAG = 0
AND tm.RECEIVE_USER_ID = 1000000001
AND tm.SEND_USER_ID != 1000000001
AND LINK_CONTENT_TYPE IN ('01', '02', '03')
ORDER BY
    tm.ADD_TIME DESC
LIMIT 20
相關文章
相關標籤/搜索