我在mysql数据库中有一个m2m关系的表,如下所示:
tbltest (test_id, testdescription)
tblprofile (profile_id, profiledescription)
tbltestprofile(testprofile_id,test_id,profile_id)
我需要在测试表中显示test_id和description,其中我在tbltestprofile中没有匹配的记录,而profile_id = x
我尝试了使用NOT IN的各种组合,但没有达到预期的效果。有人可以帮忙吗?
答案 0 :(得分:1)
SELECT test_id
, testdescription
FROM tbltest AS t
WHERE NOT EXISTS
( SELECT *
FROM tbltestprofile tp
WHERE t.test_id = tp.test_id
AND tp.profile_id = X
)
旁注。如果您保持表(和字段)名称简单并且不添加tbl
前缀(例如test
,profile
,testprofile
,则会有所帮助。您可能使用的简单3表连接:
SELECT tbltest.test_id
, tbltest.testdescription
, tblprofile.profile_id
, tblprofile.profiledescription
FROM tbltest
JOIN tbltestprofile
ON tbltest.test_id = tbltestprofile.test_id
JOIN tblprofile
ON tblprofile.profile_id = tbltestprofile.profile_id
ORDER BY tblprofile.profiledescription
让我感到头晕目眩。这不是更好吗?即使没有别名:
SELECT test.id AS test_id
, test.description AS test
, profile.id AS profile_id
, profile.description AS profile
FROM test
JOIN testprofile
ON test.id = testprofile.test_id
JOIN profile
ON profile.id = testprofile.profile_id
ORDER BY profile.description
答案 1 :(得分:0)
SELECT test_id, testdescription
FROM tbltest
LEFT JOIN tbltestprofile ON tbltest.test_id = tbltestprofile.test_id
WHERE tbltestprofile.test_id IS NULL;