Muszę sprawdzić (z tej samej tabeli), czy istnieje związek między dwoma zdarzeniami na podstawie daty i godziny.
Jeden zestaw danych będzie zawierał datę końcową niektórych zdarzeń, a drugi zestaw danych będzie zawierał datę początkową innych zdarzeń.
Jeśli pierwsze wydarzenie zakończy się przed drugim, chciałbym je połączyć.
Do tej pory mam:
SELECT name as name_A, date-time as end_DTS, id as id_A
FROM tableA WHERE criteria = 1
SELECT name as name_B, date-time as start_DTS, id as id_B
FROM tableA WHERE criteria = 2
Następnie dołączam do nich:
SELECT name_A, name_B, id_A, id_B,
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B
Czy mogę, na podstawie mojego pola validation_check, uruchomić zapytanie UPDATE z zagnieżdżonym SELECT?
mysql
select
sql-update
John M.
źródło
źródło
Odpowiedzi:
Możesz to zrobić na dwa sposoby:
Aktualizacja dołączenia MySQL:
Składnia ANSI SQL:
Wybierz, który z nich wydaje ci się najbardziej naturalny.
źródło
You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Jesteś zmuszony utworzyć tymczasową tabelę do przechowywania wyniku pośredniego. (musiał napisać podobne zapytanie do skryptu migracji)Mam nadzieję, że to Ci odpowiada.
źródło
Łatwe w MySQL:
źródło
Jeśli ktoś chce zaktualizować dane z jednej bazy danych do innej, bez względu na to, do której tabeli jest kierowany, muszą istnieć pewne kryteria.
Ten jest lepszy i czysty dla wszystkich poziomów:
Traaa! Działa świetnie!
Dzięki powyższemu zrozumieniu możesz modyfikować ustawione pola i kryteria „włączone”, aby wykonać swoją pracę. Możesz także wykonać kontrole, a następnie pobrać dane do tabel tymczasowych, a następnie uruchomić aktualizację, korzystając z powyższej składni, zastępując nazwy tabel i kolumn.
Mam nadzieję, że to zadziała, jeśli nie, daj mi znać. Napiszę dokładne zapytanie.
źródło
Mam nadzieję, że to pomoże ci w przypadku, gdy musisz dopasować i zaktualizować dwie tabele.
źródło
Znalazłem to pytanie, szukając własnego rozwiązania bardzo złożonego łączenia. Jest to alternatywne rozwiązanie bardziej złożonej wersji problemu, które moim zdaniem może być przydatne.
Musiałem wypełnić pole product_id w tabeli działań, gdzie działania są ponumerowane w jednostce, a jednostki są ponumerowane na poziomie (identyfikowanym za pomocą ciągu ?? N), tak aby można było zidentyfikować działania za pomocą SKU, tj. L1U1A1. Te jednostki SKU są następnie przechowywane w innej tabeli.
Zidentyfikowałem następujące elementy, aby uzyskać listę id_działania w stosunku do id_produktu: -
Stwierdziłem, że jest to zbyt skomplikowane, aby włączyć je do SELECT w mysql, więc utworzyłem tabelę tymczasową i połączyłem ją z instrukcją aktualizacji:
Mam nadzieję, że ktoś uzna to za przydatne
źródło
źródło
Możesz aktualizować wartości z innej tabeli za pomocą łączenia wewnętrznego w ten sposób
Śledź tutaj, aby dowiedzieć się, jak korzystać z tego zapytania http://www.voidtricks.com/mysql-inner-join-update/
lub możesz użyć select jako podkwerendy, aby to zrobić
zapytanie wyjaśnione szczegółowo tutaj http://www.voidtricks.com/mysql-update-from-select/
źródło
Możesz użyć:
źródło
Dla tego samego stołu
źródło
Miałem problem ze zduplikowanymi wpisami w samej tabeli. Poniżej znajduje się podejście, które działało dla mnie. Jest również zalecany przez @sibaz.
Wreszcie rozwiązałem go, korzystając z poniższych zapytań:
Wybrane zapytanie jest zapisywane w tabeli tymczasowej
Tabela temp jest dołączana w zapytaniu dotyczącym aktualizacji.
Nie mam zbyt dużego doświadczenia z SQL, proszę doradzić jakieś lepsze podejście, jakie znasz.
Powyższe zapytania dotyczą serwera MySql.
źródło