0

我有 3 个表:带有对象 (A) 的表、带有属性 (B) 的表和带有链接对象/属性 (A.id、B.id) 的表。问题是当我需要编辑对象时,我需要将数据加载到表单中,包括复选框状态。作为我看到的一种可能的解决方案是从具有属性的表和具有对象的表中选择数据,然后使用嵌套循环写下复选框,其中主循环将生成复选框,子循环将查看数组的选择并将检查 id 匹配的复选框,但我认为必须有某种方法可以从表中选择数据。

数据示例:

A.id          B.id        C(A.id B.id)
1             1             1    1
2             2             1    2
              3             1    3
              4             1    4
              5

我想要得到的是:

B.id          A.id
1             1
2             1
3             1
4             1
5             NULL

因此,索引为 1、2、3、4 的 B 项将被选中,而 5 则未选中。我通过使用得到了这个

SELECT DISTINCT B.id,  A.id FROM B LEFT JOIN C ON B.id=C.id 
WHERE A.id=<object id to edit> OR A.id IS NULL GROUP BY B.id

它确实有效,但仅适用于 A.id=1。有了 A.id=2 我有

B.id          A.id
5             NULL

这对我来说意味着只显示一个未选中的 id 为 5 的属性复选框。而不是类似:

B.id          A.id
1             NULL
2             NULL
3             NULL
4             NULL
5             NULL

A.id=2。有什么方法可以实现这一点,或者我应该使用不同的逻辑?

4

2 回答 2

0

您可以在CASE不使用WHERE子句的情况下使用 a

SELECT tableb.`id`,
(CASE WHEN tablec.`aid`=2 THEN tablec.`aid` ELSE NULL END ) AS test
 FROM tableb
LEFT JOIN tablec ON (tableb.`id` = tablec.`bid`) 

id=2 的小提琴

id=1 的小提琴

它会起作用,并在所有条件下为您提供匹配的 ID 或不匹配的结果

于 2013-08-01T20:21:43.377 回答
0

您可以在加入条件中指定所需的 A.id,而不是使用 WHERE 子句。

SELECT DISTINCT B.id, C.a_id FROM B LEFT JOIN C ON B.id=C.b_id AND C.a_id=2 GROUP BY B.id

在这里试试这个:http ://sqlfiddle.com/#!2/68efa/13/0

于 2013-08-01T20:23:23.617 回答