- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 2 个表。这是架构 Sqlfiddle为了它。
Table 1
Transaction Items
----------- -------------
T1 I1,I3,I7
T2 I7,I2,I3
T3 I1,I2,I3
T4 I2,I3
T5 I2,I3,I4,I5
Table 2
Id Items
------ --------
1 I1,I3
2 I1,I2
3 I2,I4
4 I2,I3
5 I4,I5
我想要Table 3
中的结果,就像Table2
中的每条记录一样,例如第一行I1,I3
它在中出现了多少次>每条记录中的表 1
。它应该显示在 SOT
列中作为答案。这里第一个是 2
。
Table 3
Id Items SOT
------ ------ --------
1 I1,I3 2
2 I1,I2 1
3 I2,I4 1
4 I2,I3 4
5 I4,I5 1
你能为此给我一些建议吗?我想到了 find_in_set
但它仅适用于匹配 1
字符串。
最佳答案
作为演示,以下 SQL 将为您提供您想要的结果(我认为),其中 Table2.Items 中最多有 100 个逗号分隔值。
正如你所看到的,读起来并不愉快,任何将来维护这个声明的人可能都会感到非常困惑。我不建议在实时代码中做这样的事情。
SELECT Id, COUNT(*)
FROM
(
SELECT Transaction, anItemCount, ItemVal.Id, COUNT(anItem) AS aCount
FROM
(
SELECT DISTINCT Id, SUBSTRING_INDEX(SUBSTRING_INDEX(Items, ',', AnInt), ',', -1) AS anItem
FROM Table2,
(
SELECT 1 + Units.i + Tens.i * 10 as AnInt
FROM
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
) Ints
) ItemVal
INNER JOIN
(
SELECT Id, COUNT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(Items, ',', AnInt), ',', -1)) AS anItemCount
FROM Table2,
(
SELECT 1 + Units.i + Tens.i * 10 as AnInt
FROM
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
) Ints
GROUP BY Id
) ItemCnt
ON ItemVal.Id = ItemCnt.Id
INNER JOIN Table1
ON FIND_IN_SET(ItemVal.anItem, Table1.Items)
GROUP BY Transaction, anItemCount, ItemVal.Id
HAVING anItemCount = aCount
) Sub1
GROUP BY Id
如果 Table2.Items 仅包含 2 个值,则可以减少为:-
SELECT Id, COUNT(*)
FROM
(
SELECT Table1.Transaction, ItemVal.Id, COUNT(anItem) AS aCount
FROM
(
SELECT Id, SUBSTRING_INDEX(Items, ',', 1) AS anItem
FROM Table2
UNION
SELECT Id, SUBSTRING_INDEX(Items, ',', -1) AS anItem
FROM Table2
) ItemVal
INNER JOIN Table1
ON FIND_IN_SET(ItemVal.anItem, Table1.Items)
GROUP BY Table1.Transaction, ItemVal.Id
HAVING aCount = 2
) Sub1
GROUP BY Id;
当 Table2.Items 中只有 2 个值时,也可以简单地完成此操作:-
SELECT Table2.Id, COUNT(Table1.Transaction) AS aCount
FROM Table2
INNER JOIN Table1
ON FIND_IN_SET(SUBSTRING_INDEX(Table2.Items, ',', 1), Table1.Items)
AND FIND_IN_SET(SUBSTRING_INDEX(Table2.Items, ',', -1), Table1.Items)
GROUP BY Table2.Id
但仍然不太令人愉快。
这里是 SQL Fiddle:-
关于mysql - 如何使用 find_in_set 使两个字符串在目标或其他内容中匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220256/
尝试完成此查询,但行不通? SELECT cute_news.title, cute_news.id, cute_news.keywords, cute_fields.post_id, cute_fi
USE mysql; DROP PROCEDURE IF EXISTS ShowUsers; DELIMITER $ CREATE PROCEDURE `ShowUsers`(IN KnownUser
根据MySQL Reference Manual - The SET Type Normally, you search for SET values using the FIND_IN_SET()
这是我正在尝试做的事情: 名为“部门”的表与名为“员工”的表具有多对多关系。因此,表department_employees 包含列:department_id、employee_id、is_acti
我以前多次使用过FIND_IN_SET,但这次有点不同。 早些时候我在表中搜索单个值,例如 SELECT * FROM tbl_name where find_in_set('1212121212',
谁能帮我解决一个 mysql 问题?我有一行包含项目列表,例如:'1','2','3','4','5','6','7','8','9' .. 3 个元素的集合.. 从 3 到 3.. 现在我如何使用“
我有一个表,其中有一列名为 category,其中一行(我正在尝试查找)在该列中有一个值 '17,1,3'。我正在运行以下几个具有概述结果的查询: SELECT * FROM firms WHERE
直接去获取代码。 用户表 +----+------------------+ | id | username | +----+------------------+ | 1 | be
我在一个表中只有几个字段存储逗号分隔值。我可以使用 like 或 FIND_IN_SET 显示查询,以从逗号分隔值中查找数据。 MySQL query finding values in a comm
************提前谢谢******************** 我正在运行此查询: SELECT * FROM `test_lab_mapping` tlm WHERE FIND_IN_SE
我在使用 MySQL find_in_set() 函数时遇到了一个非常奇怪的问题。三张表,如下。底部的查询正在查找其职位在特定事件的 Activity_assoc 中列出的所有用户。换句话说:“哪些人
这个问题已经有答案了: MySQL find_in_set with multiple search string (7 个回答) 已关闭11 个月前。 我想从数据库字段中搜索多个值。以下是我的查询。
我有下表: ... | parents_id | ... ________________________ ... | 1, 40, 7 | ... ... | 10, 4, 7, 1
这个问题已经有答案了: MySQL find_in_set with multiple search string (7 个回答) 已关闭11 个月前。 我想从数据库字段中搜索多个值。以下是我的查询。
我有 2 张 table : 一个是具有“userid”列的用户,另一个是具有"is"和“否”列的意见。"is"和“否”列都包含逗号分隔值。 我想要的是计算“userid”出现在“yes”列中的次数以
我有一些数据,我认为 FIND_IN_SET 对我有用,但显然这是因为我正在寻找的是第一个元素。 即 SELECT * FROM myData WHERE FIND_IN_SET(2, field)>
我正在尝试将数组转换为查询字符串。也许你可以帮助我。 我的数组看起来像: Array ( [3] => Array ( [0] => 7
我有这些表 伊拉西表 invoice_nr | pard_suma | pard_vad | pirk_vad 1122 200 2,4,6 2,1,3 11
我有这个员工列表的 EMPLOYEE 表 +-----+---------------+-------------+ | ID |EMPLOYEE_ID | SKILLS | +--
我对 find_in_set 中的集合类型有一些疑问这是代码: create table set_test(id int,set_col SET('a','b','c','d')); insert i
我是一名优秀的程序员,十分优秀!