Tipps & Tricks zu MySQL
FULL OUTER JOIN mit MySQL
MySql unterstützt kein FULL OUTER JOIN. Um dennoch so eine Abfrage zu erzeugen muss man einfach einen LEFT JOIN und einen RIGHT JOIN per UNION verbinden.
SELECT t1.*
, t2.*
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.feld1 = t2.feld1
UNION
SELECT t1.*
, t2.*
FROM tabelle1 AS t1
RIGHT JOIN tabelle2 AS t2
ON t1.feld1 = t2.feld1
Wenn eine Tabelle doppelte Datensätze beinhaltet, werden diese durch die Verwendung von UNION nicht berücksichtigt, da hierbei doppelte Datensätze aus der Ergebnismenge gefiltert werden. Als Lösung bietet sich daher folgende Variante an, welche auch schneller ist, da abschließend aus der Ergebnismenge keine doppelten Datensätze gelöscht werden.
SELECT t1.*
, t2.*
FROM tabelle1 AS t1
LEFT JOIN tabelle2 AS t2
ON t1.feld1 = t2.feld1
UNION ALL
SELECT t1.*
, t2.*
FROM tabelle1 AS t1
RIGHT JOIN tabelle2 AS t2
ON t1.feld1 = t2.feld1
WHERE t1.feld1 IS NULL
Die Logik dieser Abfrage ist einfach, es werden in der RIGHT JOIN-Abfrage nur noch die Datensätze ohne Gegenpart der ersten Tabelle benötigt. Mittels UNION ALL werden doppelte Datensätze nicht gelöscht.
Datensatz bei Bedarf bearbeiten oder anlegen
Wenn nicht bekannt ist ob ein Datensatz bereits vorhanden ist und somit nur bearbeitet werden muss (UPDATE) oder neu angelegt werden muss (INSERT), hilft eine Erweiterung der INSERT-Anweisung weiter.
Wenn beim hinzufügen, ein doppelter Primärschlüssel (PRIMARY KEY) gefunden wird, wird der Datensatz mit diesem Primärschlüssel geändert und somit nicht neu angelegt.
INSERT INTO tabelle
( id
, feld_2
, feld_3
) VALUES ( 1
, 'wert'
, 'wert'
) ON DUPLICATE KEY UPDATE feld_2 = 'wert'
, feld_3 = 'wert'
Doppelte Datensätze löschen
Um innerhalb einer Tabelle doppelte Datensätze zu löschen oder zu finden, bedarf es nur einer SQL-Anweisung. Die Tabelle muss dafür jedoch eine Spalte (hier: id) mit eindeutigen nummerischen Wert haben und als Primärschlüssel (Primary Key) definiert sein.
Zum Vergleichen werden alle Felder genutzt die identische Werte haben, Ausnahme ist hier auf jeden Fall der Primärschlüssel. Anhand des Primärschlüssels wird beim löschen nur der Datensatz mit dem niedrigsten Wert erhalten, alle anderen doppelten Datensätze werden eliminiert.
Wenn nur doppelte Datensätze ausgegeben werden sollen und nicht sofort gelöscht werden sollen, muss nur die SELECT-Anweisung ausgeführt werden.
DELETE t1 FROM tabelle1 t1
, (SELECT COUNT(*) AS anzahl
, MIN(id) AS id
, feld_1
, feld_2
, feld_3
, feld_n
FROM tabelle1
GROUP BY feld_1
, feld_2
, feld_3
, feld_n
HAVING anzahl > 1
) AS t2
WHERE t1.feld_1 = t2.feld_1
AND t1.feld_2 = t2.feld_2
AND t1.feld_3 = t2.feld_3
AND t1.feld_n = t2.feld_n
AND t1.id != t2.id
INSERT mit Daten aus anderen Tabellen
INSERT INTO tabelle1
( feld1
, feld2
, feld3
)
SELECT feld_a
, feld_b
, feld_c
FROM tabelle2
, tabelle3
WHERE tabelle2.feld_c = tabelle3.feld_c
phpMyAdmin konfigurieren
Eigenschaften eintragen und als config.inc.php im Hauptverzeichnis speichern:
$cfg['Servers'][1]['host'] = '';
$cfg['Servers'][1]['auth_type'] = 'cookie|config|http|signon';
$cfg['Servers'][1]['user'] = '';
$cfg['Servers'][1]['password'] = '';
$cfg['Servers'][1]['only_db'] = '';
Zeilenumbruch
Zeilenumbruch in MySQL: \r\n
Ersetzen mit SQL
UPDATE tabelle
SET feld = REPLACE(feld, 'suchwort', 'ersetzedurch');
root-Benutzerkennwort ändern über die Kommandozeile
mysqladmin -u root password new_password
oder
mysql -u root -p
set password=password("neues passwort");