我有基本的表一和二。我们称他们为tbl1和tbl2。
tbl1
---------
1 - apple |
2 - orange |
3 - banana |
4 - pineapple
tbl2
---------
1 - table |
2 - chair |
3 - sofa |
然后有tbl3有外键将它链接到上面的两个表。
表3表单有两个选择字段:一个查询tbl1,另一个查询tbl2。到现在为止还挺好。我在tbl3中组合了来自tbl1和tbl2的项目。
然后我遇到以下情况:当用户满足tbl3时,我希望在用户从tbl1中选择一个项目之后重新加载select2(对应于来自tbl2的数据)。为什么?
让我们说第一次完成tbl3时,用户从tbl1选择“apple”,从tbl2选择“sofa”。当用户选择“apple”时,第二个下拉列表会重新加载所有3个项目作为选项。
现在,用户第二次完成tbl3表单,如果用户再次选择“apple”,他现在只有2个选项。苹果和沙发之前已被选中。选项现在只是“桌子”和“椅子”。如果他现在选择“苹果”和“桌子”,第一项“苹果”的剩余选项将是“主席”。等等...
我想不出一个SQL来运行这个从tbl2抓取元素的查询。我必须使用tbl1中的选定元素并以某种方式获取REMAINING项目,那些与马赫不对应的项目。这个SQL查询是否可以?我相信,但想不出办法。
答案 0 :(得分:1)
如果链接是基于每个用户:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id
如果链接 是基于每个用户:
SQL Server:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = @userId
甲骨文:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = :userId
答案 1 :(得分:0)
我猜测table3有列:
用户,Tbl1-ID,Tbl2-ID
我猜测,对于用户X,你想要tbl2的值,这些值是基于tbl1的selecton而不是表3中的。
SELECT ID, Value
FROM tbl2
WHERE tbl2.ID NOT IN (
SELECT Tbl2-ID
FROM Table3
WHERE (User = <this user>) AND (Tbl1-ID = <selected tbl1 ID>)
)