FETCH 未关联 field_name 来自 mysql table
FETCH not associated field_name from mysql table
我有 table 如下所示,
Table 1 :
ID
FIELD_NAME
1
field_1
2
field_2
3
field_3
Table 2 :
ID
TAG_NAME
1
tag_1
2
tag_2
3
tag_3
4
tag_4
Table 3 :
FIELD_ID
TAG_ID
1
1
1
2
1
3
2
1
3
2
3
3
所以 table-3 显示:
field1(来自 table1)与 table-2
的所有 3 个标签 ID 相关联
field2(来自 table1)与 table-2
的所有标签 id=1 相关联
和
field3(from table1) 与 table-2
的所有标签 id=2,3 相关联
我喜欢写一个MYSQL查询来获取
对于给定的 tag_name,查找与此无关的所有字段名称
示例:
输入=tag_1
输出=field_3
解释:因为 field_3 与 tag_1 id
没有任何关系
输入=tag_4
输出=field_1,field_2,field_3
解释:因为没有字段与 tag_4 id
有任何关系
您可以通过 table1
到 table2
的 CROSS
连接和 return 的 LEFT
连接哟 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。
您可以检查某些 link table 条目不存在的字段...
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')
)
(请原谅打字错误,我在 phone。)
dbfiddle 从@nbk 借来的:here
我有 table 如下所示,
Table 1 :
ID | FIELD_NAME |
---|---|
1 | field_1 |
2 | field_2 |
3 | field_3 |
Table 2 :
ID | TAG_NAME |
---|---|
1 | tag_1 |
2 | tag_2 |
3 | tag_3 |
4 | tag_4 |
Table 3 :
FIELD_ID | TAG_ID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
3 | 2 |
3 | 3 |
所以 table-3 显示:
field1(来自 table1)与 table-2
的所有 3 个标签 ID 相关联field2(来自 table1)与 table-2
的所有标签 id=1 相关联和
field3(from table1) 与 table-2
的所有标签 id=2,3 相关联我喜欢写一个MYSQL查询来获取
对于给定的 tag_name,查找与此无关的所有字段名称
示例:
输入=tag_1
输出=field_3
解释:因为 field_3 与 tag_1 id
没有任何关系输入=tag_4
输出=field_1,field_2,field_3
解释:因为没有字段与 tag_4 id
有任何关系您可以通过 table1
到 table2
的 CROSS
连接和 return 的 LEFT
连接哟 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。
您可以检查某些 link table 条目不存在的字段...
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')
)
(请原谅打字错误,我在 phone。)
dbfiddle 从@nbk 借来的:here