我需要找到一种方法来将我在一个表中的数字序列与另一个表中的序列进行匹配,但如果可能的话,在SQL中使用不同的数值。
示例:
Table A contains
Word | Location
-----------------
Quick 2
Brown 3
Fox 4
Table B contains
Word | Location | Product
------------------------------
Quick 2 A
Brown 3 A
Fox 4 A
Brown 8 B
Fox 9 B
Quick 10 B
Quick 7 C
Quick 18 D
Brown 19 D
Fox 20 D
基本上我只想退回产品A&表B中的D是因为它们是唯一一个引用所有三个单词的人,重要的是这些单词是相同的有序序列,即2,3,4与18,19,20相同,只是具有不同的数值。
很容易找到所有引用所有单词的产品,但我只想要按正确顺序匹配所有相同单词的产品。
请注意,订单通常不会像2,3,4一样简单,可能是2,7,9,在这种情况下,如果产品的所有单词的顺序为36,41,43 I会希望它返回。
我希望上述内容有意义
答案 0 :(得分:2)
试试这个:
select PRODUCT
from (
select A.Word,A.Location-B.Location as diff,B.PRODUCT
from TableA A
join TableB B
on A.Word=B.Word)C
group by diff,PRODUCT
having count(*)=3
答案 1 :(得分:1)
架构和数据:
CREATE TABLE A
(
Word varchar(10),
Location int
);
CREATE TABLE B
(Word varchar(10),
Location int,
Product varchar(3));
INSERT INTO A (Word, Location)
VALUES
('Quick', 2),
('Brown', 3),
('Fox', 4);
INSERT INTO B (Word, Location, Product)
VALUES
('Quick', 2, 'A'),
('Brown', 3, 'A'),
('Fox', 4, 'A'),
('Brown', 8, 'B'),
('Fox', 9, 'B'),
('Quick', 10, 'B'),
('Quick', 7, 'C'),
('Quick', 18, 'D'),
('Brown', 19, 'D'),
('Fox', 20, 'D');
查询:
SELECT Product
FROM B B1
WHERE (
SELECT COUNT(*)
FROM B B2
WHERE B2.Location < B1.Location
AND B2.Product = B1.Product) = (
SELECT COUNT(*)
FROM A A1 JOIN A A2 ON A1.Word = B1.Word
WHERE A2.Location < A1.Location)
GROUP BY Product
HAVING COUNT(*) = (SELECT COUNT(*) FROM A)
Here你可以找到SQLFiddle。