Database MySQL查询:tag.names和lang的列表,它不是';t已在图像\u URL的组合中插入

Database MySQL查询:tag.names和lang的列表,它不是';t已在图像\u URL的组合中插入,database,mysql,Database,Mysql,我想不出任何好办法来获得tag.names和lang的列表,它们还没有插入到images\uURL的组合中 我的数据库看起来像这样 tags name user_id +-------+---------+ |hi | 1 | |friend | 1 | |friend | 2 | |people | 2 | +-------+---------+ users id lang +---+------+ | 1 |

我想不出任何好办法来获得tag.names和lang的列表,它们还没有插入到images\uURL的组合中

我的数据库看起来像这样

tags name user_id +-------+---------+ |hi | 1 | |friend | 1 | |friend | 2 | |people | 2 | +-------+---------+ users id lang +---+------+ | 1 | en | | 2 | sv | +---+------+ images_urls name lang +--------+------+ | hi | en | | friend | sv | +--------+------+ 我建议图片URL应该包含用户id而不是名称,但这是另一个问题

列不在('name`、'name1'、'name2'、'name3')


也适用于测试目的。

我不确定为什么
图像\u URL
有一个名称而不是
用户id
,但这应该可以:

SELECT t.name, u.lang
FROM tags t
JOIN users u ON ( u.id = t.user_id )
LEFT JOIN images_urls iu ON ( iu.name=t.name AND iu.lang=u.lang )
WHERE iu.name IS NULL

使用
LEFT JOIN
返回
NULL
用于
images\u url
中不存在的行,因此我对此进行了检查。

我怀疑这是否会返回正确的结果。在本例中,它不会返回
friend en
,因为有一个带有
friend
(但不是正确的)的
image\u url
。这似乎有效。图像\u URL具有名称,因为图像表示标记而不是用户。
SELECT tags.name, users.lang
FROM tags, users
WHERE tags.user_id = users.id
AND CONCAT(tags.name, ',', users.lang) NOT IN(
    SELECT DISTINCT CONCAT(name, ',', lang) FROM images_urls
)
GROUP BY CONCAT(name, ',', lang)
ORDER BY SUM(tags.count) DESC
LIMIT 20;
SELECT tags.name, users.lang
FROM tags, users
WHERE tags.user_id = users.id
AND users.name NOT IN (SELECT name from images_urls);
SELECT t.name, u.lang
FROM tags t
JOIN users u ON ( u.id = t.user_id )
LEFT JOIN images_urls iu ON ( iu.name=t.name AND iu.lang=u.lang )
WHERE iu.name IS NULL