SQL - 如果在另一个

时间:2017-11-16 14:01:07

标签: sql sqlite

我有四个感兴趣的表:用户,模型,问题和标签。

“标签”包含描述用户对模型上问题的答案的行。例如用户名TEXT,中间INT,qid INT,回答TEXT

我有兴趣找出用户仍然需要提供的模型 - 问题对。要求用户为出现在各自表格中的每种模型和问题组合提供答案。因此,对于给定的用户名,我可以拥有模型ID和问题ID的行。

用户:

  • 培根,XXXX,XXXX,XXXX,......
  • Mark,XXXX,XXXX,XXXX,...

型号:

  • 1,climateOne,XXXX,....
  • 2,climateTwo,XXXX,....
  • 3,climateTwo,XXXX,....

问题:

  • 1,“这是一个问题吗?”
  • 2,“还有另一个?”

标签:

  • 培根,1,2,“是的是......”
  • 培根,3,2,“又是什么?!”

所以询问“什么样的模型问题对'培根'没有完成”的结果将是回归:

(1,1)(2,1)(2,2)(3,1)

2 个答案:

答案 0 :(得分:0)

要获得所有可能的模型和问题组合,请使用交叉连接:

SELECT models.id,
       questions.id
FROM models
CROSS JOIN questions

然后筛选出已完成的内容:

...
WHERE (models.id, questions.id) NOT IN (SELECT mid, qid
                                        FROM labels);

答案 1 :(得分:0)

谢谢CL。为了正确的方向。当我使用python的sqlite3包时,这段代码对我有用。我也包含了用户名规范。但是,我不知道它是否有效:)

SELECT m.mid, q.qid
FROM models m CROSS JOIN questions q
WHERE NOT EXISTS(
    SELECT 1 
    FROM labels l 
    WHERE l.username = ? AND l.mid = m.mid AND l.qid = q.qid
)

全部谢谢!