Oto, co chcę zrobić na mojej bazie danych MySQL .
Chciałbym zrobić:
SELECT *
FROM itemsOrdered
WHERE purchaseOrder_ID = '@purchaseOrdered_ID'
AND status = 'PENDING'
Jeśli to nie zwróci żadnych wierszy, co jest możliwe if(dr.HasRows == false)
, utworzę teraz UPDATE
w purchaseOrder
bazie danych:
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID'
Jak mogę sprawić, by ten proces był nieco krótszy?
itemsOrdered_ID
i ma powtarzające siępurchaseOrder_ID
wartościpurchaseorder
drugiej strony baza danych ma unikalny identyfikatorpurchaseOrder_ID
Odpowiedzi:
W przypadku konkretnego zapytania możesz wykonać:
Mogę jednak zgadywać, że zapętlasz się na wyższym poziomie. Aby ustawić wszystkie takie wartości, spróbuj tego:
źródło
Możesz użyć
UPDATE
składni wielostołowej, aby uzyskać efektANTI-JOIN
międzypurchaseOrder
iitemsOrdered
:źródło
Ponieważ MySQL nie obsługuje
if exists(*Your condition*) (*Write your query*)
, możesz uzyskać klauzulę „if”, pisząc w ten sposób:źródło
Możesz również użyć następującego zapytania, aby sprawdzić, czy rekord istnieje, a następnie go zaktualizować:
źródło
źródło
SQL
źródło
po SQL Server 2008 zapewnia
Merge
operację wstawiania, aktualizowania i usuwania na podstawie instrukcji pojedynczego dopasowania, która również umożliwia dołączanie. poniższy przykład może ci pomóc.w ten sposób możesz wstawiać, aktualizować i usuwać w jednym zestawieniu.
a więcej informacji można znaleźć w oficjalnych dokumentach na https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx
źródło
Jeśli tabela zawiera miliony rekordów, następujące zapytanie będzie działać szybko.
źródło
Możesz zadeklarować zmienną zawierającą liczbę zwróconych wyników przy wybranym zapytaniu. Następnie można uruchomić instrukcję aktualizacji, jeśli ta zmienna jest większa niż 0
źródło