| Autor | Zpráva | ||
|---|---|---|---|
| Gogo_v Profil |
#1 · Zasláno: 20. 1. 2012, 08:05:16
Dobrý den. Asi před třemi měsíci jsem řešíl problém se složeným selectem kde jsem dostal skvělou radu od mistra SQL Kajmana Odmazání záznamu z DB podle podmínek ve složeném selectu
select n.* from nic n join (select KL.id from klient KL inner join nic NIC on KL.id = NIC.Klientid where NIC.ipv4_addr_3 between 211 and 220 group by KL.id) t on t.id = n.Klientid where n.ipv4_addr_3 not between 211 and 220 Ukazka dat +------+----+-------------+-------------+ | nid | id | ipv4_addr_3 | ipv4_addr_4 | +------+----+-------------+-------------+ | 2153 | 17 | 41 | 14 | | 2154 | 17 | 41 | 15 | | 6977 | 17 | 216 | 191 | | 2149 | 19 | 41 | 10 | | 6918 | 19 | 216 | 134 | | 5944 | 22 | 200 | 230 | | 7720 | 22 | 220 | 117 | | 28 | 26 | 129 | 73 | | 29 | 27 | 129 | 72 | | 2395 | 26 | 130 | 62 | | 34 | 31 | 129 | 131 | +------+----+-------------+-------------+ Děkuji moc za pomoc. |
||
| Kajman Profil |
#2 · Zasláno: 20. 1. 2012, 09:07:07
Něco takového?
select KL.id from klient KL left join nic NIC on KL.id = NIC.Klientid and NIC.ipv4_addr_3 between 211 and 220 where NIC.Klientid is null |
||
| Gogo_v Profil |
Kajman:
No myslim že to zjednodušším +------+-------------+-------------+----------+ | id | ipv4_addr_3 | ipv4_addr_4 | Klientid | +------+-------------+-------------+----------+ | 6000 | 18 | 205 | 4689 | | 6004 | 18 | 206 | 4689 | | 6005 | 134 | 83 | 4168 | | 6008 | 214 | 86 | 4168 | | 6009 | 134 | 87 | 4341 | | 6011 | 220 | 89 | 4699 | | 6012 | 136 | 12 | 4699 | | 6013 | 128 | 173 | 4701 | Mockrát děkuju. |
||
| Kajman Profil |
#4 · Zasláno: 22. 1. 2012, 20:28:27
select * from nic n where n.Klientid not in (select s.Klientid from nic s where s.ipv4_addr_3 between 211 and 220) Když by byl pomalý s podivným explainem, tak raději přepsat na join. |
||
| Gogo_v Profil |
#5 · Zasláno: 23. 1. 2012, 09:23:10
Kajman:
Diky moc, nakonec jsem to nějak zplácal, v podstatě tak jak jste mi teď poradil. Šlo mi primarně pochopit princip jak vyřadit z nějakého dotazu část vracených výsledků. Asi jsem to konečně pochopil Diky :) Pro zajímavost co mi z toho vylezlo :) select N.*,CONCAT(N.ipv4_addr_1, '.', N.ipv4_addr_2, '.', N.ipv4_addr_3, '.', N.ipv4_addr_4) as ipv4,KO.jmeno,KO.prijmeni from nic N left join kontakt KO on KO.Klientid = N.Klientid where N.port_id in (SELECT id AS port_id FROM porty WHERE zarizeni_id in (SELECT id from zarizeni where mgmt_rozsah=1)) AND N.Klientid not in (select Klientid from nic where ipv4_addr_3 between 211 AND 220) |
||
|
Časová prodleva: 14 let
|
|||
0