sql >> Databáze >  >> RDS >> Mysql

Vložit tam, kde neexistuje – bez primárního klíče

Pokud opravdu chcete napsat svůj vlastní (pracovní) dotaz...

INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

... ale MySQL tohle všechno zvládne za vás!

Nepotřebujete primární klíče, aby to MySQL zvládlo za vás, měli byste přidat UNIQUE klíčové omezení na kombinovanou sadu dvou sloupců.

Dotaz na přidání jedinečného klíče dent_group_uniq_key na groupdentlink .

ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

Poté použijte INSERT IGNORE na váš dotaz:

INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE se pokusí vložit řádek do vaší tabulky, pokud selže kvůli omezení klíče, bude se chovat, jako by se nic nestalo.



  1. Příkazový řádek Windows PSQL:existuje způsob, jak umožnit přihlášení bez hesla?

  2. Oracle:Jak převedu hex na desítkové v Oracle SQL?

  3. MySQL rodič -> podřízený dotaz

  4. Použití Simple Membership Provider s mysql