Слияние похожих таблиц в SQL часть 2 - PullRequest
0 голосов
/ 18 апреля 2011

Я думаю, что люди не хотели помогать мне в прошлый раз, потому что я не хотел размещать колонки, но я стремлюсь решить это, поэтому я откладываю свое лучшее суждение и обнажаю его.

ОК, у меня есть две подобные таблицы, и я использую MySQL и PHP для генерации таблиц. Пока у меня есть 3 таблицы:

CPE:
fastethernet00,subnet00,fastethernet01,subnet01,hsrp,vip,bgp,bgp_neighbor,remote_as,bgp_customer_net,next_hop,loopback,cpe,hostname,cpe_cust_index,int_next_hop_1,int_next_hop_2,voice,solution

Liverpool:
apn1,apn2,apn3,apn4,apn5,customer,vpi_vci,vlan1,cust_index,RADIUS,nexthop,atinterface1,atinterface2,feinterface1,feinterface2,spinterface1,spinterface2,ip_address_range1,ip_address_range2,handset_address_range1,handset_address_range2,handset_address_range3,handset_address_range4,handset_address_range5,handset_address_range6,handset_address_range7,handset_address_range8,handset_address_range9,handset_address_range10,handset_address_range11,handset_address_range12,handset_address_range13,handset_address_range14,handset_address_range15,handset_address_range16,DNS_Server1,DNS_Server2,OLVDMVPN,live

Greenwich:
apn_1,apn_2,apn_3,apn_4,apn_5,customer_,vpi_vci_,vlan_1,cust_index_,RADIUS_,nexthop_,atinterface_1,atinterface_2,feinterface_1,feinterface_2,spinterface_1,spinterface_2,ip_address_range_1,ip_address_range_2,handset_address_range_1,handset_address_range_2,handset_address_range_3,handset_address_range_4,handset_address_range_5,handset_address_range_6,handset_address_range_7,handset_address_range_8,handset_address_range_9,handset_address_range_10,handset_address_range_11,handset_address_range_12,handset_address_range_13,handset_address_range_14,handset_address_range_15,handset_address_range_16,DNS_Server_1,DNS_Server_2,OLVDMVPN_,live_

Первый шаг, который мне нужно сделать, - это связать Гринвич с Ливерпулем через apn_1 / apn1. Одна и та же запись не обязательно будет на обоих, и могут даже быть дубликаты. PHP, который я использую для создания этой таблицы, выдает синтаксическую ошибку вокруг UNION ALL:

mysql_query ("CREATE TABLE Both (
SELECT * FROM `Greenwich` left outer join Liverpool on Greenwich.apn_1 = Liverpool.apn1
UNION ALL
SELECT * FROM Greenwich
RIGHT OUTER JOIN Liverpool on Greenwich.apn_1 = Liverpool.apn1  where Greenwich.apn_1 is null)")

Кто-нибудь может увидеть, что с этим не так?

После этого мне нужно связать результирующую таблицу с cpe_cust_index через cust_index / cust_index_, поэтому в идеале я думаю, что мне нужно объединить эти ячейки. Если эти клетки присутствуют в Гринвиче и Ливерпуле, они всегда будут одинаковыми.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Ответ описан здесь третьим способом с использованием таблицы взаимных исключений мьютекса

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

Этот плюс фильтр дает мне именно то, что мне нужно. Теперь мне просто нужно объединить поля индекса и объединить поля apn 1.

0 голосов
/ 18 апреля 2011

Попробуйте назвать все столбцы, которые вы хотите выбрать, и псевдоним, затем, используя AS, чтобы они совпадали. Union не любит несоответствия имен столбцов.

Например.

Select col1 as col1, col2 as col2 from table1
Union
Select col-1 as col1, col-2 as col2 from table2
...