大佬教程收集整理的这篇文章主要介绍了从 mysql 表中获取未关联的 field_name,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有如下表格,
表 1:
ID | FIELD_name |
---|---|
1 | field_1 |
2 | fIEld_2 |
3 | fIEld_3 |
表 2:
ID | TAG_name |
---|---|
1 | tag_1 |
2 | tag_2 |
3 | tag_3 |
4 | tag_4 |
表 3:
FIELD_ID | TAG_ID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
3 | 2 |
3 | 3 |
所以表 3 显示:
fIEld1(from table1) 与 table-2 的所有 3 个标签 ID 相连
fIEld2(from table1) 与 table-2 的所有标签 ID=1 相连
和
fIEld3(from table1) 与 table-2 的所有标签 ID=2,3 相连
我喜欢写一个 @H_983_5@mysqL 查询来获取
对于给定的 tag_name,查找与此无关的所有字段名称
示例:
输入 = tag_1
输出 = fIEld_3
说明:因为 fIEld_3 与 tag_1 ID 没有任何关系
输入 = tag_4
输出 = field_1、fIEld_2、fIEld_3
说明:因为没有字段与 tag_4 ID 有任何关系
您可以使用 CROSS
到 table1
的 table2
联接和 LEFT
联接 yo table3
来实现,您可以在其中返回不匹配的行:>
SELECT t2.TAG_NAME,t1.FIELD_NAME
FROM table1 t1 CROSS JOIN table2 t2
LEFT JOIN table3 t3 ON t3.FIELD_ID = t1.ID AND t3.TAG_ID = t2.ID
WHERE t2.TAG_NAME = ? AND t3.FIELD_ID IS NULL
如果您希望结果为逗号分隔的列表,您还可以按 TAG_NAME
分组并使用 GROUP_CONCAT()
:
SELECT t2.TAG_NAME,GROUP_CONCAT(t1.FIELD_Name) fields
FROM table1 t1 CROSS JOIN table2 t2
LEFT JOIN table3 t3 ON t3.FIELD_ID = t1.ID AND t3.TAG_ID = t2.ID
WHERE t2.TAG_NAME = ? AND t3.FIELD_ID IS NULL
GROUP BY t2.TAG_NAME
将 ?
替换为您搜索的标签。
参见demo。
您可以检查某些链接表条目不存在的字段...
SELECT
*
FROM
table1
WHERE
NOT EXISTS (
SELECT *
FROM table3
WHERE field_id = table1.id
AND tag_id = (SELECT id FROM table2 WHERE tag_name = 'tag_4')
)
(请原谅打字错误,我正在打电话。)
从@nbk 借来的 dbfiddle:here
以上是大佬教程为你收集整理的从 mysql 表中获取未关联的 field_name全部内容,希望文章能够帮你解决从 mysql 表中获取未关联的 field_name所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。