2013-03-01 18 views
5

Sorunum var. Üç tablo var: T1, T2, T_target. T1 ve T2 tablosunun birçok farklı sütunu var, ancak her ikisinden de sadece ID sütununa ihtiyacım var. T_target tablosunun bir ID sütunu ve bir diğeri vardır: project_No.Birimle birlikteleme kurun

T1 ve T2'de de görünen bazı kimlikler vardır, ancak bunlar arasında çiftler oluşturmak istemiyorum, her iki tabloda da bir kimlik belirirse, T_target'a yalnızca bir kez eklenmelidir, ancak zaten T_target’ta iki kez harekete geçmesine izin verilir. Kriterlerin diğeri, yeni eklenen her kimliğin 'project_No' sütununda 21 değeri olması gerekir. Yani, ör .:

T1:

ID 
2548 
2566 
2569 
2843 
2888 
... 

T2:

ID 
2557 
2566 
2569 
2700 
2913 
2994 
3018 
5426 
... 

T_target:

ID  project_No 
2976 1 
3331 7 
4049 7 
5426 8 
5915 3 
6253 10 
... 

Ve sonuç İstiyorum se E:

T_target:

: Yani

ID  project_No 
2548 21 
2557 21 
2566 21 
2569 21 
2700 21 
2843 21 
2888 21 
2913 21 
2976 1 
2994 21 
2018 21 
3331 7 
4049 7 
5426 8 
5426 21 
5915 3 
6253 10 
... 

, ben bu kod ile denedim (T_target sütunların hem birincil anahtar oldukları için burada "NOT NULL" kriter olmak önemlidir)

insert into T_target (ID, project_No) 
    select (select ID 
    from T1 where ID is not NULL 
union 
    select ID 
    from T2 where ID is not NULL), 21 

select * from T_target 

hata iletisi: Alt sorgu 1'den fazla değer döndürdü "Msg 512, Düzey 16, State 1, satır 2 . Alt sorgu, =,! =, <, < =,>,> = veya alt sorgu bir ifade olarak kullanıldığında alt sorguya izin verilmez. deyim sonlandırıldı"

Sonra yerine ilk SEÇ ve parantez DEĞERLERİ ifadeye çalıştım ama hata aynıdır

Orada da benzer bir sorundur.:. mySQL query: How to insert with UNION? ancak bu çözüm doesn o DEĞER ve SELECT'in arasındaki sözdizimi hatası gösterir çünkü 't benim için çalışıyor.

Lütfen bana yardım edin. teşekkür ederiz! Bu yapmalıyım

+0

Ben sorunuzun en okumak ama mevcut sorgu için doğru sözdizimi düşünmüyor adres: Kimlik BOŞ birlik seçmek değil 'T1 den T_target (kimliği, project_No) seçeneğini Kimliği, 21 takın nerede ID, T2, ID NULL değil – Bridge

cevap

19

neyi Seni biraz select deyiminde kimlikleri tekrarını önlemek için değiştirmeyi düşünüyorum

INSERT INTO T_target 
      (ID, 
      project_No) 
SELECT ID, 
     21 
FROM T1 
WHERE ID IS NOT NULL 
UNION 
SELECT ID, 
     21 
FROM T2 
WHERE ID IS NOT NULL 
+0

çalışıyor, 21 çalışıyor! – A117

+0

Genellikle bir if ifadesi yazardım, ancak bu stratejiyi kullanırken, ekleme kısmını birkaç kez yazmak zorunda kalmamı, bu çözümü sevmeme olanak sağladığından, mümkün olduğunda bu şekilde devam etmesini sağladım.:) –

1

gerekir.

INSERT INTO T_target 
      (ID, 
      project_No) 

SELECT ID, 21 
FROM (
SELECT ID 
FROM T1 
WHERE ID IS NOT NULL 
UNION 
SELECT ID 
FROM T2 
WHERE ID IS NOT NULL 
) A 
+1

Bilginize: "Sendika" ile "ayrı" olmanız gerektiğini düşünmüyorum. – Kaf

+0

Kesinlikle haklısınız. - Afedersiniz –