1

次のようなテーブルがあります。

TABLE A
+-----+---------------+-------------+
| ID  | DNR_DETAIL_ID | DESCRIPTION |
+-----+---------------+-------------+
|  1  |       1       |   DESC A    |
+-----+---------------+-------------+
|  2  |       2       |   DESC B    |
+-----+---------------+-------------+
|  3  |       3       |   DESC C    |
+-----+---------------+-------------+


TABLE B
+--------+---------------+
| DNR_ID | DNR_DETAIL_ID |
+------------------------+
|   1    |     1,2       |
+--------+---------------+
|   2    |       3       |
+--------+---------------+

ご覧のとおり、DNR_DETAIL_ID列は両方のテーブルで共通です。私がやりたいことは、両方のテーブルをフィールド値( null または not )で結合したままにしました

THE RESULT SHOULD BE (IF DNR_ID = 1) :
+-------------+---------+
| DESCRIPTION | CHECKED |
+-------------+---------+
|    DESC A   |    1    |
+-------------+---------+
|    DESC B   |    1    |
+-------------+---------+
|    DESC C   |    0    |
+-------------+---------+
4

5 に答える 5

1

これを試して:

SELECT TA.description AS DESCRIPTION, CASE WHEN TB.checked IS NOT NULL THEN 1 ELSE 0 END AS CHECKED 
FROM
(
    select distinct description from TableA 
) TA left join 
(
    SELECT description, 'checked' FROM TableA where dnt_detail_id in (
               select         dnr_detail_id from TableB where dnr_id = 1 
         )
)TB ON TB.description = TA.description 
于 2013-12-25T08:25:47.530 に答える
1

FIND_IN_SET()を使用してこれを試してください

SELECT 
A.Description,
CASE WHEN B.DNR_ID IS NOT NULL THEN 1 ELSE 0 END as Checked
FROM A
LEFT JOIN B
ON FIND_IN_SET(A.DNR_DETAIL_ID, B.DNR_DETAIL_ID) 
   AND B.DNR_ID=1

SQLFiddle demo

于 2013-12-25T08:25:58.890 に答える
1

どうもありがとうございました。私はあなたの提案をすべて試しましたが、どれもうまくいきません。興味深いことに、コードはsqlfiddle(同じスキーマと値) ではうまく機能しますが、ローカル環境では機能しません! これは、ローカルで機能するクエリです。

/** 
 * DNR_DETAIL_DESC IS TABLE A
 * DNR_LIST IS TABLE B
 */
SELECT A.DNR_DETAIL_DESC,
   CASE WHEN B.DNR_ID IS NOT NULL THEN 1 ELSE 0 END AS CHECKED
FROM MD_DNR_DETAIL A
LEFT JOIN (SELECT * FROM DNR_LIST WHERE DNR_ID = 1) AS B
   ON FIND_IN_SET(A.DNR_DETAILT_ID, B.DNR_DETAIL_ID)
于 2013-12-25T09:46:33.557 に答える
0

いろいろな書き方ができますが、以下の方法がベストです。

SELECT 
   MD_DNR_DETAIL.DNR_DETAIL_DESC as DESCRIPTION,
   CASE WHEN DNR_LIST.DNR_ID IS NOT NULL THEN 1 ELSE 0 END AS CHECKED
FROM MD_DNR_DETAIL 
LEFT JOIN DNR_LIST 
ON FIND_IN_SET(MD_DNR_DETAIL.DNR_DETAILT_ID, DNR_LIST.DNR_DETAIL_ID)
于 2013-12-25T10:11:52.940 に答える