Этот синтаксис найдет точные совпадения для разных имен в @ t1 и @ t2.Я извиняюсь, потому что написано на MSSQL.Я надеюсь, что это может быть преобразовано в Sybase.Поработав с ним весь день, хочу поделиться этой красотой.Я знаю, что эти длинные сценарии непопулярны.Я надеюсь, что кто-нибудь все равно его оценит.
Этот выбор точно совпадет с @ t2 в @ t1.
Я заполнил таблицы по этой ссылке http://data.stackexchange.com/stackoverflow/q/108035/
DECLARE @t1 TABLE(id varchar(10), [key] varchar(10), val varchar(10))
DECLARE @t2 TABLE(id varchar(10), [key] varchar(10), val varchar(10))
;WITH t1 AS (
SELECT t1.id, t1.[key], t1.val, count(*) count1, sum(count(*)) OVER(PARTITION BY t1.id) sum1 FROM @t1 t1
GROUP BY t1.id, t1.[key], t1.val
), t2 as (
SELECT t2.id, t2.[key], t2.val, count(*) count1, sum(count(*)) OVER(PARTITION BY t2.id) sum1 FROM @t2 t2
GROUP BY t2.id, t2.[key], t2.val
), t3 AS (
SELECT t1.*, sum(t1.count1) OVER(PARTITION BY t1.id) sum2
FROM t1
JOIN t2 on t1.val = t2.val AND t1.[key]=t2.[key]
AND t1.count1 = t2.count1 AND t1.sum1 = t2.sum1
)
SELECT t3.id, t3.[key], t3.val FROM t3
JOIN @t2 t ON t3.[key] = t.[key] AND t3.val = t.val
WHERE t3.sum2 = t3.sum1
Не пробуйте скрипт, он не содержит данных, используйте ссылку, где заполняются таблицы.