저는 SQL에서 멍청한 사람이고 SQLite로 작업하기 시작했습니다.이 사이트가 내 첫 번째 게시물이기 때문에 내 고유의 부족함을 용서해주십시오. 이해. 나는 BA로 졸업 한 후에 스스로 가르쳤으므로 나에게 열중 해주세요.SQLite : 다른 테이블에 설정된 조건을 기반으로 하나의 열을 업데이트하십시오.
모든 데이터가 동일한 테이블의 일부인 경우에만 다음 쿼리를 사용할 수 있습니다. 이후로 두 테이블을 세 개의 개별 테이블로 분리했습니다 : widgetCustomer, widgetSale 및 widgetOrderInfo.
UPDATE widgetOrderInfo
SET extendedcost = (cost * qty) * (0.80)
WHERE widgetCustomer.IsASenior = 'Y';
-- Seniors get a 20 percent discount;
^^ 문제가있는 부분입니다. 이 쿼리를 사용할 때마다 SQLite는 "No such column : IsASenior."를 반환합니다.
- 참고 : IsASenior는 코드에서 이전에 트리거를 기반으로 'Y'또는 'N'으로 설정된 widgetCustomer의 열입니다.
UPDATE widgetOrderInfo
SET extendedcost = (cost * qty);
, 내가 알고 아주 기본적인,하지만 난 내가하기 위해 무엇을해야하는지 확실 해요 : 나는 다음과 같은 쿼리를 사용하여 widgetOrderInfo 테이블에 데이터 만 사용하여 매우 쉽게 작업 할 기본 곱셈 왔 내 widgetOrderInfo 테이블을 가져 와서 widgetCustomer의 'IsASenior'열의 데이터를 확인합니다.
UPDATE 문의 두 테이블 간의 데이터에 액세스하려면 JOIN을 사용해야합니까?
도움이 될 것입니다. 감사!
CREATE TABLE widgetCustomer
(id INTEGER PRIMARY KEY, name TEXT, age INT, IsASenior TEXT, last_order_id INT, soItemID INT);
CREATE TABLE widgetSale
(id INTEGER PRIMARY KEY, item_id INT, item_name TEXT, customer_id INT, quan INT, price MONEY(8,2));
CREATE TABLE widgetOrderInfo
(id INTEGER PRIMARY KEY, salesOrderID INT, cost MONEY(8,2), qty INT, extendedcost MONEY(8,2))
; I은 공연있다 구요 QUERIES (WIP 위치 표시기 많이) OF
FULL AND ORDER LIST;
CREATE TRIGGER SeniorCheck AFTER INSERT ON widgetCustomer
BEGIN
UPDATE widgetCustomer
SET IsASenior = 'Y' WHERE age >= 65;
UPDATE widgetCustomer
SET IsASenior = 'N' WHERE age < 65;
END
;
INSERT INTO widgetCustomer (name, age, soItemID)
VALUES ('Ian', 24, 3);
INSERT INTO widgetCustomer (name, age, soItemID)
VALUES ('Andrew', 29, 2);
INSERT INTO widgetCustomer (name, age, soItemID)
VALUES ('John', 65, 1);
INSERT INTO widgetCustomer (name, age, soItemID)
VALUES ('Kathy', 60, 4)
;
CREATE TRIGGER newWidgetSale AFTER INSERT ON widgetSale
BEGIN
UPDATE widgetCustomer
SET last_order_id = NEW.id
WHERE widgetCustomer.id = NEW.customer_id;
END
;
INSERT INTO widgetSale (item_id, item_name, customer_id, quan, price)
VALUES (1, 'Blue Brick', 3, 50, 9.95);
INSERT INTO widgetSale (item_id, item_name, customer_id, quan, price)
VALUES (2, 'Red Brick', 2, 30, 4.95);
INSERT INTO widgetSale (item_id, item_name, customer_id, quan, price)
VALUES (3, 'Black Brick', 1, 24, 9.95);
INSERT INTO widgetSale (item_id, item_name, customer_id, quan, price)
VALUES (4, 'Yellow Brick', 4, 30, 9.95)
;
CREATE TRIGGER SubtractQuan AFTER INSERT ON widgetOrderInfo FOR EACH ROW
BEGIN
UPDATE widgetSale
SET quan = (quan - New.qty)
WHERE customer_id = New.id;
END
;
INSERT INTO widgetOrderInfo (salesOrderID, cost, qty)
VALUES (283001, 9.95, 4);
INSERT INTO widgetOrderInfo (salesOrderID, cost, qty)
VALUES (283002, 4.95, 8);
INSERT INTO widgetOrderInfo (salesOrderID, cost, qty)
VALUES (283003, 9.95, 5);
INSERT INTO widgetOrderInfo (salesOrderID, cost, qty)
VALUES (283004, 9.95, 15)
;
UPDATE widgetOrderInfo
SET extendedcost = (cost * qty)
;
SELECT
CASE
WHEN qty BETWEEN 5 and 7 THEN 'parcel'
WHEN qty BETWEEN 8 and 14 THEN 'package'
WHEN qty BETWEEN 15 and 30 THEN 'box'
WHEN qty BETWEEN 31 and 99 THEN 'crate'
ELSE 'individually wrapped'
END
AS PackagingBasedOnPurchaseSize,
COUNT(*) qty FROM widgetOrderInfo
GROUP BY
CASE
WHEN qty BETWEEN 5 and 7 THEN 'parcel'
WHEN qty BETWEEN 8 and 14 THEN 'package'
WHEN qty BETWEEN 15 and 30 THEN 'box'
WHEN qty BETWEEN 31 and 99 THEN 'crate'
ELSE 'individually wrapped'
END
;
SELECT * FROM widgetSale;
SELECT * FROM widgetCustomer;
SELECT * FROM widgetOrderInfo;
할 필요가있는 경우 내 전체 데이터베이스에 대한 링크를 제공 할 수 있습니다.
위젯 오더 정보를 'widgetCustomer'에 가입해야합니다. 우리가 쉽게 당신을 도울 수 있도록 테이블 스키마를 제공하십시오. –
테이블 간의 관계를 설명하기 위해 외래 키를 추가해야합니다. UPDATE는 쓰기 쉽습니다. – syllabus