如何使用泛型 SQL 模拟 N 维 INTERSECT

How to simulate a N-dimension INTERSECT with generic SQL

这是从同一个 table 中提取的 2 个示例:

SELECT source_id 
FROM table_cust_string_value
WHERE cust_string_id=2 AND VALUE LIKE '%TATA%';

SELECT source_id 
FROM table_cust_string_value
WHERE cust_string_id=4 AND VALUE LIKE '%TUTU%';

他们给 2 套,共 source_id。

没错。现在,如果我需要与 MySQL 相交(其中不存在 INTERSECT),我会这样找到:

SELECT DISTINCT source_id 
FROM (
   SELECT source_id 
   FROM table_cust_string_value
   WHERE cust_string_id=2 AND VALUE LIKE '%TATA%'
   ) t1
INNER JOIN (
   SELECT source_id 
   FROM table_cust_string_value
   WHERE cust_string_id=4 AND VALUE LIKE '%TUTU%'
   ) t2
USING (source_id);

但是如果我需要从 N 组 中执行此操作怎么办?

我找不到解决方案 + 我担心性能问题。这样做的

您可以使用分组方法。根据您可用的索引,这可能会更好。

SELECT source_id
FROM   table_cust_string_value
WHERE  cust_string_id IN ( 2, 4 )
GROUP  BY source_id
HAVING MAX(CASE WHEN cust_string_id = 2 AND VALUE LIKE '%TATA%' THEN 1 END) = 1
       AND MAX(CASE WHEN cust_string_id = 4 AND VALUE LIKE '%TUTU%' THEN 1 END) = 1