题
我有基本的表一和二。我们称他们为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时,用户选择了<!>“; apple <!>”;来自tbl1和<!> quot; sofa <!> quot;来自tbl2。当用户选择<!>“; Apple <!>”时,第二个下拉列表会重新加载所有3个项目作为选项。
现在,用户第二次完成tbl3表单,如果用户选择<!>“apple <!>”;再次,他现在只有2个选项。苹果和沙发之前已被选中。选项现在只有<!> quot; table <!> quot;和<!>“;主席<!>”;如果他选择<!>“苹果<!>”;和<!> quot; table <!> quot;现在,第一个项目的剩余选项<!>“apple <!>”;将是<!>“;主席<!>”;等等...
我想不出一个SQL来运行这个从tbl2抓取元素的查询。我必须使用tbl1中的选定元素并以某种方式获取REMAINING项目,那些与马赫不对应的项目。这个SQL查询是否可以?我相信,但想不出办法。
解决方案
我猜测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>)
)
其他提示
如果链接是基于每个用户:
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
不隶属于 StackOverflow