Làm cách nào để trừ một bảng khỏi một bảng khác trong mysql?

Vấn đề của tôi. Tôi có 3 bàn. Một với các mặt hàng, một với giao hàng sắp tới và một với giao hàng đi

Bảng được gọi là các mục

id | item_name 
----------------
1  | Bike
2  | Helmet
3  | Pedal
4  | Light

Bảng được gọi là đi vào

id | item_id | quantity
-----------------------
1  | 2       | 5
2  | 3       | 2
3  | 4       | 1
4  | 1       | 5
5  | 2       | 4
6  | 1       | 6
7  | 3       | 5

Bảng gọi đi

id | item_id | quantity
-----------------------
1  | 3       | 2
2  | 1       | 1
3  | 2       | 3
4  | 3       | 4
5  | 1       | 2
6  | 2       | 1
7  | 4       | 1

Những gì tôi muốn làm là lấy tổng số lượng trong kho bằng cách trừ đi các lần giao hàng đi từ lần giao hàng sắp tới và đặt hàng theo mặt hàng có số lượng ít nhất

Có lẽ có một cách tốt hơn để làm điều này?

Đây là truy vấn mà tôi nhận được, nhưng số tiền SUM không chính xác. Ai đó có thể giúp tôi và giải thích tại sao số tiền SUM không chính xác không và tôi nên giải quyết vấn đề này theo cách tốt nhất như thế nào?

SELECT items.id AS ID, 
       items.item_name, 
       Sum[ingoing.quantity] - Sum[outgoing.quantity] AS InStock
FROM   items
       LEFT JOIN ingoing 
              ON ingoing.item_id = items.id
       LEFT JOIN outgoing 
              ON outgoing.item_id = items.id
 GROUP BY ID
 ORDER BY InStock ASC

Đây là kết quả tôi muốn từ này

ID | item_name | InStock
---------------------------
4  | Light     | 0
3  | Pedal     | 1
2  | Helmet    | 5
1  | Bike      | 8

Những gì tôi nhận được

ID | item_name | InStock
---------------------------
4  | Light     | 0
3  | Pedal     | 2
2  | Helmet    | 10
1  | Bike      | 16
- stackoverflow. com

ghi bàn. 3

câu trả lời được chấp nhận

Có thể dễ dàng quên đi tác động nhân lên của việc tham gia. Khi bạn gặp sự cố như thế này, hãy kiểm tra kết quả của phép nối trước khi lọc/nhóm

SELECT items.id, 
       items.item_name,
       ingoing.id  AS ingoing,
       outgoing.id AS outgoing
FROM   items
       LEFT JOIN ingoing 
              ON ingoing.item_id = items.id
       LEFT JOIN outgoing 
              ON outgoing.item_id = items.id

Xem nó trên

Như bạn có thể thấy, tập kết quả chứa nhiều bản ghi có cùng giá trị

id | item_id | quantity
-----------------------
1  | 2       | 5
2  | 3       | 2
3  | 4       | 1
4  | 1       | 5
5  | 2       | 4
6  | 1       | 6
7  | 3       | 5
2 và nhiều bản ghi có cùng giá trị
id | item_id | quantity
-----------------------
1  | 2       | 5
2  | 3       | 2
3  | 4       | 1
4  | 1       | 5
5  | 2       | 4
6  | 1       | 6
7  | 3       | 5
0. Điều này là do mỗi bản ghi đầu vào cho một mặt hàng cụ thể đã kết hợp với mọi bản ghi đầu ra cho cùng một mặt hàng đó. do đó, có 4 bàn đạp trong tập kết quả [2 đến x 2 đi], v.v.

Tổng hợp từng bảng theo mục trước khi tham gia [và do đó đảm bảo rằng chỉ có 1 bản ghi cho mỗi mục ở mỗi bên của liên kết] sẽ đạt được những gì bạn đang theo đuổi

________số 8

Xem nó trên

Lưu ý rằng vấn đề của bạn sẽ được đơn giản hóa rất nhiều bằng cách chỉ có một bảng cơ bản duy nhất về chuyển động của hàng tồn kho, với các đại lượng dương biểu thị các chuyển động theo một hướng và các đại lượng âm biểu thị các chuyển động theo hướng ngược lại. sau đó một tổng kết theo nhóm đơn giản của toàn bộ bảng sẽ mang lại kết quả mong muốn của bạn

Toán tử MINUS trong SQL được sử dụng để trả về tất cả các hàng trong câu lệnh SELECT đầu tiên không được trả về bởi câu lệnh SELECT thứ hai. Mỗi câu lệnh SELECT sẽ xác định một tập dữ liệu. Toán tử TRỪ sẽ truy xuất tất cả các bản ghi từ tập dữ liệu đầu tiên và sau đó xóa khỏi kết quả tất cả các bản ghi từ tập dữ liệu thứ hai

truy vấn trừ

Giải trình. Truy vấn MINUS sẽ trả về các bản ghi trong khu vực được tô bóng màu xanh lam. Đây là những bản ghi tồn tại trong Dataset1 chứ không phải trong Dataset2

Mỗi câu lệnh CHỌN trong truy vấn TRỪ phải có cùng số trường trong tập kết quả có kiểu dữ liệu tương tự

TIỀN BOA. Toán tử TRỪ không được hỗ trợ trong tất cả các cơ sở dữ liệu SQL. Nó có thể được sử dụng trong cơ sở dữ liệu như Oracle

Đối với các cơ sở dữ liệu như SQL Server, PostgreSQL và SQLite, hãy sử dụng toán tử EXCEPT để thực hiện loại truy vấn này

cú pháp

Cú pháp của toán tử TRỪ trong SQL là

SELECT expression1, expression2, .. expression_n
FROM tables
[WHERE conditions]
MINUS
SELECT expression1, expression2, .. expression_n
FROM tables
[WHERE conditions];

Tham số hoặc Đối số

biểu thức1, biểu thức2, biểu thức_nCác cột hoặc phép tính mà bạn muốn truy xuất. tableCác bảng mà bạn muốn truy xuất các bản ghi từ. Phải có ít nhất một bảng được liệt kê trong mệnh đề TỪ. điều kiện WHERETùy chọn. Đây là những điều kiện phải được đáp ứng để hồ sơ được chọn

Ghi chú

  • Phải có cùng số biểu thức trong cả hai câu lệnh SELECT
  • Các biểu thức tương ứng phải có cùng kiểu dữ liệu trong câu lệnh SELECT. Ví dụ. biểu thức1 phải có cùng kiểu dữ liệu trong cả câu lệnh SELECT thứ nhất và thứ hai

Ví dụ - Với biểu thức đơn

Sau đây là ví dụ toán tử SQL MINUS có một trường có cùng kiểu dữ liệu

id | item_id | quantity
-----------------------
1  | 2       | 5
2  | 3       | 2
3  | 4       | 1
4  | 1       | 5
5  | 2       | 4
6  | 1       | 6
7  | 3       | 5
0

Ví dụ SQL MINUS này trả về tất cả các giá trị supply_id trong bảng nhà cung cấp và không có trong bảng đơn đặt hàng. Điều này có nghĩa là nếu giá trị nhà cung cấp_id tồn tại trong bảng nhà cung cấp và cũng tồn tại trong bảng đơn đặt hàng, thì giá trị nhà cung cấp_id sẽ không xuất hiện trong tập hợp kết quả này

Ví dụ - Sử dụng mệnh đề ORDER BY

Sau đây là một ví dụ toán tử TRỪ sử dụng mệnh đề ORDER BY

id | item_id | quantity
-----------------------
1  | 2       | 5
2  | 3       | 2
3  | 4       | 1
4  | 1       | 5
5  | 2       | 4
6  | 1       | 6
7  | 3       | 5
1

Trong ví dụ toán tử SQL MINUS này, vì tên cột khác nhau giữa hai câu lệnh SELECT, nên sẽ thuận lợi hơn khi tham chiếu các cột trong mệnh đề ORDER BY theo vị trí của chúng trong tập kết quả. Trong ví dụ này, chúng tôi đã sắp xếp kết quả theo tên_nhà cung cấp / tên_công ty theo thứ tự tăng dần, được biểu thị bằng ____13

Làm cách nào để trừ hai bảng trong MySQL?

Làm cách nào để trừ trong MySQL? . Tuy nhiên, chúng ta có thể sử dụng mệnh đề LEFT JOIN để mô phỏng toán tử này . Chúng ta có thể sử dụng cú pháp sau để mô phỏng toán tử TRỪ. CHỌN cột_list TỪ bảng1.

Chúng ta có thể trừ hai bảng trong SQL không?

MINUS so sánh dữ liệu trong hai bảng và chỉ trả về các hàng dữ liệu sử dụng các cột được chỉ định tồn tại trong bảng đầu tiên nhưng không tồn tại trong bảng thứ hai . Có thể nhận được tất cả các kết quả từ bảng thứ hai không tồn tại trong bảng đầu tiên bằng cách chuyển đổi thứ tự bảng trong truy vấn.

Cách cộng và trừ trong truy vấn MySQL?

Ví dụ: để thêm giá trị ngày, hãy sử dụng DATE_ADD[] ; . 7, “Chức năng ngày và giờ”. .
+ Bổ sung. mysql> CHỌN 3+5;
- Phép trừ. mysql> CHỌN 3-5;
- Phép trừ đơn phương. .
*.
/.
BHTG. .
N % M , N MOD M

Chủ Đề