【发布时间】:2014-02-25 14:48:01
【问题描述】:
我有 Question_Master 和 Assessment_Master 表。在 question_Master 我对亲子关系有疑问。当我回答家长问题时,当我过滤已回答的按钮过滤器时,我需要显示家长和孩子。当我回答孩子的问题时,当我过滤回答的按钮过滤器时,我需要显示父母和孩子。但我的问题是,当我回答这两个问题时,我得到了孩子的重复。
当回答父问题时,它得到父子:
SELECT a.QM_ID,a.QM_QCM_ID,
a.QM_Question,a.QM_Type,
a.QM_Parent_Id,
c.AM_Answer,
c.AM_Comments
FROM question_master a
INNER JOIN Assessment_master c
ON (c.AM_QM_ID = a.QM_ID
AND c.AM_HNM_ID = %d
AND c.AM_HM_ID = %d
AND c.AM_ASM_Local_Id = %@)
WHERE a.QM_Parent_Id = 0
AND a.QM_Status = 'A'
AND a.QM_QCM_ID = %@
AND a.QM_QRM_Id = %@
UNION
SELECT b.QM_ID,
b.QM_QCM_ID,
b.QM_Question,
b.QM_Type,
b.QM_Parent_Id,
null,
null
FROM question_master b
INNER JOIN Assessment_master d
ON (d. AM_QM_ID = b.QM_Parent_Id
AND d.AM_HNM_ID = %d
AND d.AM_HM_ID = %d
AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id != 0
AND b.QM_Status = 'A'
AND b.QM_QCM_ID = %@
AND b.QM_QRM_Id = %@
当我回答孩子的问题时,它得到了父子:
SELECT a.QM_ID,a.QM_QCM_ID,
a.QM_Question,a.QM_Type,
a.QM_Parent_Id,
c.AM_Answer,
c.AM_Comments
FROM question_master a
INNER JOIN Assessment_master c
ON (c.AM_QM_ID = a.QM_ID
AND c.AM_HNM_ID = %d
AND c.AM_HM_ID = %d
AND c.AM_ASM_Local_Id = %@)
WHERE a.QM_Parent_Id = 0
AND a.QM_Status = 'A'
AND a.QM_QCM_ID = %@
AND a.QM_QRM_Id = %@
UNION
SELECT b.QM_ID,
b.QM_QCM_ID,
b.QM_Question,
b.QM_Type,
b.QM_Parent_Id,
d.AM_Answer,
d.AM_Comments
FROM question_master b
INNER JOIN Assessment_master d
ON (d. AM_QM_ID = b.QM_ID
AND d.AM_HNM_ID = %d
AND d.AM_HM_ID = %d
AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id IN (SELECT QM_ID
FROM question_master
WHERE QM_Parent_Id = 0
AND QM_Status = 'A'
AND QM_QCM_ID = %@
AND QM_QRM_Id = %@)
我使用了上面的组合查询:
SELECT a.QM_ID,a.QM_QCM_ID,
a.QM_Question,a.QM_Type,
a.QM_Parent_Id,
c.AM_Answer,
c.AM_Comments
FROM question_master a
INNER JOIN Assessment_master c
ON (c.AM_QM_ID = a.QM_ID
AND c.AM_HNM_ID = %d
AND c.AM_HM_ID = %d
AND c.AM_ASM_Local_Id = %@)
WHERE a.QM_Parent_Id = 0
AND a.QM_Status = 'A'
AND a.QM_QCM_ID = %@
AND a.QM_QRM_Id = %@
UNION
SELECT b.QM_ID,
b.QM_QCM_ID,
b.QM_Question,
b.QM_Type,
b.QM_Parent_Id,
null,
null
FROM question_master b
INNER JOIN Assessment_master d
ON (d. AM_QM_ID = b.QM_Parent_Id
AND d.AM_HNM_ID = %d
AND d.AM_HM_ID = %d
AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id != 0
AND b.QM_Status = 'A'
AND b.QM_QCM_ID = %@
AND b.QM_QRM_Id = %@
UNION
SELECT b.QM_ID,
b.QM_QCM_ID,
b.QM_Question,
b.QM_Type,
b.QM_Parent_Id,
d.AM_Answer,
d.AM_Comments
FROM question_master b
INNER JOIN Assessment_master d
ON (d. AM_QM_ID = b.QM_ID
AND d.AM_HNM_ID = %d
AND d.AM_HM_ID = %d
AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id IN (SELECT QM_ID
FROM question_master
WHERE QM_Parent_Id = 0
AND QM_Status = 'A'
AND QM_QCM_ID = %@
AND QM_QRM_Id = %@)
但是在这里我得到了额外的子重复值。当我使用 LEFT 时,它会获取所有子问题,如果我使用 EXCEPT 然后回答父问题,它不会得到父子关系。
Question_Master:
QM_ID QM_QRM_ID QM_LCM_ID QM_QCM_ID QM_Question QM_Parent_Id
432 5 19 1 question_parent 0
433 5 19 1 question_child 432
434 5 19 1 question_child1 432
Assessment_Master:
AM_ID AM_UM_ID AM_ASM_Local_Id AM_QM_ID AM_Answer AM_Comments AM_HNM_ID
1 8 1 433 NULL testing 1
如果我回答了孩子的问题 433,我得到的只有父母和 433 孩子。我没有收到 434 问题。
a.QM_ID a.QM_QCM_ID a.QM_Question a.QM_Parent_Id c.AM_Answer c.AM_Comments
432 1 question_parent 0 Null NULL
433 1 question_child 432 null value
【问题讨论】:
-
%d %@ 是否来自 Objective-C,因此 iOS 的重要性?它们是什么意思?每个值或某些值序列相同的值?
-
好的,我想我明白了。这就像一个 printf 格式。
-
@albe:你能给出答案吗?
-
我需要一些东西:你使用的是什么数据库引擎(PostgreSQL)?正如@Ziouas 指出的那样,这似乎是一个分层的事情,这很重要。还有你传递的参数和相关数据的小样本。
-
我无法发布我的图片..
标签: ios sql parent-child inner-join union