假设我有两个表T和T1
Ť
id p o
1 47 1
2 48 2
3 49 25
T1
id p o
1 47 1
2 42 2
3 47 25
如果count(T1.p)>1
Ť
id p o
1 47 1
2 48 2
3 49 25
1 47 1
3 47 25
我尝试了以下查询,但它无法正常工作
insert into T(id , p,o)(SELECT T1.id , T1.p1,T1.l FROM T1
where SELECT count(*) FROM t1
GROUP BY t1.p
HAVING COUNT(*)>1)
了解更多details。 任何帮助将不胜感激。
答案 0 :(得分:1)
insert into T SELECT T1.id , T1.p1,T1.l FROM T1
GROUP BY t1.p1
HAVING COUNT(t1.p1)>1
http://www.sqlfiddle.com/#!2/75c8e/1
在左侧使用dml
答案 1 :(得分:1)
您的选择中有几处错误。
这应该让你前进:
SELECT T1.id , T1.p1,T1.l
FROM t1
GROUP BY t1.p1
HAVING COUNT(*)>1
编辑:更新了SQL小提琴以包含插入。
答案 2 :(得分:1)
要将这些值输入T,您必须找出他们在T1中的身份并再次使用T1加入他们,以获得正确的行数:
INSERT INTO T (id, p, o)
SELECT TT.*
FROM T1 TT
INNER JOIN (
SELECT id, p1, l
FROM T1
GROUP BY p1
HAVING COUNT(*) > 1
) a ON a.p1 = TT.p1;
这是如何运作的:
SELECT id, p1, l
FROM T1
GROUP BY p1
HAVING COUNT(*) > 1
返回表中多次出现的p1。这将返回p1 = 47. GROUP BY p1 HAVING COUNT(*) > 1
确保对于每个p1,我们只希望结果出现多次。
然后,我们再次使用T1进行内部JOIN,以获得所有具有P1 = 47的行:
ID P1 L
1 47 1
3 47 25
然后,您只需将此结果插入目标表。
答案 3 :(得分:1)
以下SQL应该按照您的要求执行:
INSERT INTO T (id, p, o)
SELECT id, p1, l
FROM T1
WHERE p1 IN (
SELECT p1
FROM T1
GROUP BY p1
HAVING COUNT(*) > 1
);