Toon posts:

[MySQL] inner join vervangen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Omdat ik een oude mysql versie heb (3.23.58) is het niet mogelijk om een inner join query te gebruiken. Nu wil ik graag mactrack gaan gebruiken, wat een plugin is voor cacti. Hierin zit helaas een inner join in. Updaten is op dit moment niet mogelijk. Heeft iemand een idee hoe ik de volgende query kan ombakken zodat dit gaat werken in MySQL 3?

SQL:
1
2
3
4
5
UPDATE mac_track_temp_ports
INNER JOIN mac_track_ips
ON (mac_track_temp_ports.mac_address = mac_track_ips.mac_address
AND mac-Track_temp_ports.site_id = mac_track_ips.site_id)
SET mac_track_temp_ports.ip_address = mac_track_ips.ip_address

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
SQL:
1
2
3
4
UPDATE mac_track_temp_ports
SET max_track_temp_ports.ip_address=mac_track_ips.ip_address
WHERE mac_track_temp_ports.mac_address = mac_track_ips.mac_address
AND mac-Track_temp_ports.site_id = mac_track_ips.site_id

Staat ook in de FAQ trouwens ;)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Maar met deze query krijg ik de volgende error:

ERROR 1109: Unknown table 'mac_track_ips' in where clause

Terwijl de tabel mac_track_ips wel gewoon bestaat.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op donderdag 04 mei 2006 @ 14:01:
Maar met deze query krijg ik de volgende error:

ERROR 1109: Unknown table 'mac_track_ips' in where clause

Terwijl de tabel mac_track_ips wel gewoon bestaat.
oeps
SQL:
1
2
3
4
UPDATE mac_track_temp_ports, mac_track_ips
SET max_track_temp_ports.ip_address=mac_track_ips.ip_address
WHERE mac_track_temp_ports.mac_address = mac_track_ips.mac_address
AND mac-Track_temp_ports.site_id = mac_track_ips.site_id

Ik gok dat dat hem was ;)

[ Voor 4% gewijzigd door Gonadan op 04-05-2006 14:03 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
En eer een error, ben nu al 3 uur aan het kloten met een query! :)

ERROR 1064: You have an error in your SQL syntax near ' mac_track_ips
SET max_track_temp_ports.ip_address=mac_track_ips.ip_address
WH' at line 1

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op donderdag 04 mei 2006 @ 14:05:
En eer een error, ben nu al 3 uur aan het kloten met een query! :)

ERROR 1064: You have an error in your SQL syntax near ' mac_track_ips
SET max_track_temp_ports.ip_address=mac_track_ips.ip_address
WH' at line 1
grm, ok, ik ga te snel :)
ik zal effe kijken :)

Edit:
Ik heb sowieso een - staan in plaats van een _ :)
oepsie

[ Voor 11% gewijzigd door Gonadan op 04-05-2006 14:11 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Dit is gewoon een programmeerprobleem hoor, en die mogen in Programming. Zie ook Waar hoort mijn topic?. :)

DTE>>PRG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
SQL:
1
2
3
4
UPDATE mac_track_temp_ports, mac_track_ips
SET mac_track_temp_ports.ip_address = mac_track_ips.ip_address
WHERE mac_track_temp_ports.mac_address = mac_track_ips.mac_address
AND mac_track_temp_ports.site_id = mac_track_ips.site_id

Werkt dit echt niet? :?

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Nope, de zelfde error als mijn reactie hierboven.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Belachelijk, de syntax is goed.
Ik zal nog even googlen voor je. :?

Edit:
De reference geeft dit:
Starting with MySQL 4.0.4, you can also perform UPDATE operations covering multiple tables. However, you cannot use ORDER BY or LIMIT with a multiple-table UPDATE. The table_references clause lists the tables involved in the join. Its syntax is described in Section 13.2.7.1, “JOIN Syntax”. Here is an example:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

The preceding example shows an inner join that uses the comma operator, but multiple-table UPDATE statements can use any type of join allowed in SELECT statements, such as LEFT JOIN.

Before MySQL 4.0.18, you need the UPDATE privilege for all tables used in a multiple-table UPDATE, even if they were not updated. As of MySQL 4.0.18, you need only the SELECT privilege for any columns that are read but not modified.
Nu nog ontcijferen hoe het dan wel kan :?

Na 6 keer lezen lijkt het dus toch te kunnen :? :+

[ Voor 92% gewijzigd door Gonadan op 04-05-2006 14:31 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

MySQL is waarschijnlijk gewoon niet blij met een join in een update in eedere versies van MySQL 4.

@edit hierboven: dat zeg ik. :P

[ Voor 16% gewijzigd door NMe op 04-05-2006 14:30 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Dit is de tabel dump van de bij behorende tabellen.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE TABLE mac_track_temp_ports (
  site_id int(10) unsigned NOT NULL default '0',
  device_id int(10) unsigned NOT NULL default '0',
  hostname varchar(40) NOT NULL default '',
  description varchar(100) NOT NULL default '',
  vlan_id varchar(5) NOT NULL default 'N/A',
  vlan_name varchar(50) NOT NULL default '',
  mac_address varchar(20) NOT NULL default '',
  ip_address varchar(20) NOT NULL default '',
  dns_hostname varchar(200) default '',
  port_number varchar(10) NOT NULL default '',
  port_name varchar(50) NOT NULL default '',
  scan_date datetime NOT NULL default '0000-00-00 00:00:00',
  updated tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (port_number,scan_date,mac_address,device_id),
  KEY site_id (site_id),
  KEY description (description),
  KEY ip_address (ip_address),
  KEY hostname (hostname),
  KEY vlan_name (vlan_name),
  KEY vlan_id (vlan_id),
  KEY device_id (device_id),
  KEY mac (mac_address),
  KEY updated (updated)
) TYPE=MyISAM COMMENT='Database for Storing Temporary Results for Tracking Device M';

CREATE TABLE mac_track_ips (
  site_id int(10) unsigned NOT NULL default '0',
  device_id int(10) unsigned NOT NULL default '0',
  hostname varchar(40) NOT NULL default '',
  description varchar(100) NOT NULL default '',
  port_number varchar(10) NOT NULL default '',
  mac_address varchar(20) NOT NULL default '',
  ip_address varchar(20) NOT NULL default '',
  dns_hostname varchar(200) default '',
  scan_date datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (scan_date,ip_address,mac_address,site_id),
  KEY ip (ip_address),
  KEY port_number (port_number),
  KEY mac (mac_address),
  KEY device_id (device_id),
  KEY site_id (site_id),
  KEY hostname (hostname),
  KEY scan_date (scan_date)
) TYPE=MyISAM;

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Ik neem aan dat je volledige priviledges hebt?

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Ja, gewoon root privileges.

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Ik heb je dump gemaakt en de query uitgevoerd en hij werkt wel in hogere versies.
Wat raar dit 8)7

http://www.foxdata.com/newsportal/article.php?id=47342&group=comp.databases

Het kan dus inderdaad niet :( :( :( :( :(

Ik las de ge-quote tekst verkeerd.
Voor 4.0.18 kan het wel, maar niet voor 4.0.4 :+

[ Voor 66% gewijzigd door Gonadan op 04-05-2006 14:43 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
Oke, dan is de enige mogelijkheid dus updaten.. argg! Toch bedankt voor je medewerking!!

[ Voor 25% gewijzigd door Verwijderd op 04-05-2006 14:45 ]


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Misschien kan je een workaround proberen.

1. http://uphpu.org/pipermail/uphpu/2004-November/002191.html

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Peter
  • Registratie: Januari 2005
  • Laatst online: 21-02 20:23
Als je root hebt, waarom update je dan niet :o Ik zie eigenlijk geen goede redenen om dat niet te doen :P

Verwijderd

Zal dit niet werken? SQL Server pakt dit wel als de subquery een resultaat teruggeeft. Geen idee hoe dat met MySQL zit.

SQL:
1
2
3
4
5
6
7
UPDATE mac_track_temp_ports 
SET mac_track_temp_ports.ip_address = 
 (SELECT mac_track_ips.ip_address
  FROM mac_track_ips 
  WHERE mac_track_temp_ports.mac_address = mac_track_ips.mac_address 
  AND mac-Track_temp_ports.site_id = mac_track_ips.site_id
 ) 

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 22:47

Gonadan

Admin Beeld & Geluid, Harde Waren
Verwijderd schreef op donderdag 04 mei 2006 @ 15:01:
Zal dit niet werken? SQL Server pakt dit wel als de subquery een resultaat teruggeeft. Geen idee hoe dat met MySQL zit.

SQL:
1
2
3
4
5
6
7
UPDATE mac_track_temp_ports 
SET mac_track_temp_ports.ip_address = 
 (SELECT mac_track_ips.ip_address
  FROM mac_track_ips 
  WHERE mac_track_temp_ports.mac_address = mac_track_ips.mac_address 
  AND mac-Track_temp_ports.site_id = mac_track_ips.site_id
 ) 
mySQL 3.23 laat geen join toe in zijn update, dus een subquery al helemaal niet denk ik zo :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

.Peter schreef op donderdag 04 mei 2006 @ 14:57:
[...]


Als je root hebt, waarom update je dan niet :o Ik zie eigenlijk geen goede redenen om dat niet te doen :P
root mysql rechten is iets anders als root rechten op een server.
Maar ik ken het probleem van dergelijke oude MySQL servers, sommige hosters willen gewoon niet upgraden |:(
Verwijderd schreef op donderdag 04 mei 2006 @ 15:01:
Zal dit niet werken? SQL Server pakt dit wel als de subquery een resultaat teruggeeft. Geen idee hoe dat met MySQL zit.
subqueries in mysql 3 8)7
Pagina: 1