Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
So sánh 02 table/Query
#1
Xin giúp đỡ.
Em có 2 table SoSach và ThucTe với các trường và dữ liệu như sau:
Bảng SoSach:
TenTS     NSD     NguyenGia
MT         2013     11.000.000
MT         2013     11.000.000
MT         2012     12.000.000

Bảng ThucTe
TenTS    NSD     NguyenGia
MT         2013    11.000.000
MT         2013    11.000.000
MT         2013    11.000.000

Ở đây em muốn tìm:
1 - Em muốn tìm 2 dòng giống nhau theo điều kiện đồng NguyenGia và NSD và xuất hiện như sau:
TenTS     NSD     NguyenGia
MT         2013     11.000.000
MT         2013     11.000.000

2 - Và 1 dòng khác nhau
TenTS    NSD     NguyenGia
MT         2013    11.000.000

Em làm như sau nhưng không được nhờ các anh giúp đỡ.
1 - Trùng:
"SELECT SoSach.NguyenGia, SoSach.NSD, SoSach.TenTS, SoSach.DiaChi, ThucTe.NguyenGia, ThucTe.NSD, ThucTe.TenTS, ThucTe.DiaChi FROM SoSach, ThucTe Where SoSach.NguyenGia =ThucTe.NguyenGia and SoSach.NSD=ThucTe.NSD"
2 - Không trùng:
"SELECT SoSach.NguyenGia FROM(SoSach)WHERE (((Exists (SELECT * FROM ThucTe WHERE (SoSach.NguyenGia = ThucTe.NguyenGia AND SoSach.NSD = ThucTe.NSD)))=False))"

Xin cảm ơn nhiều.
Chữ ký của khoidong khoidong,gia nhập Thủ Thuật Access từ 25-04 -16.
Reply
Những người đã cảm ơn
#2
Yêu cầu này của bạn cũng chua lắm (theo khả năng của tui 014 ). Bạn làm 2 sổ sách à 007 . Có thể sẽ có giải pháp khác trong việc tổ chức CSDL để dễ theo dõi sự khác nhau giữa 2 báo cáo.

Tôi chỉ có thể làm được như bên dưới:
[Hình: ScreenShot2016-04-25at10.04.48PM.png]

Cách làm:
- Tạo 1 Union query gộp 2 bảng SoSach và ThucTe lại.
Mã PHP:
SELECT "SoSach" AS TenTable,
SoSach.TenTS,SoSach.NSD,SoSach.NguyenGia FROM SoSach
UNION ALL SELECT 
"ThucTe" AS TenTable,
ThucTe.TenTS,ThucTe.NSD,ThucTe.NguyenGia FROM ThucTe
- Tạo 1 query tìm các record trùng nhau (có Count >1)
Mã PHP:
SELECT uQry2Table.TenTableuQry2Table.TenTSuQry2Table.NSDuQry2Table.NguyenGiaCount(uQry2Table.TenTS) AS SoRecordGiongNhau
FROM uQry2Table
GROUP BY uQry2Table
.TenTableuQry2Table.TenTSuQry2Table.NSDuQry2Table.NguyenGia
HAVING 
(((Count(uQry2Table.TenTS))>1)); 

File demo:http://www.mediafire.com/download/bt9hhp...Tables.mdb
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn khoidong , maidinhdan
#3
1. Đầu tiên xin cảm ơn bài hướng dẫn của [b]ongke0711
2. Đề nghị bạn sửa lại tiêu đề bài viết cho sát với nội dung câu hỏi. Thực ra, vỏn vẹn câu hỏi của bạn giống như so sánh sự giống và khác nhau của 02 table có cùng cấu trúc Data ( tực là giống như ID giống nhau là có dùng UNION).


Quay lại với bài của bạn
Trả lời bổ sung thêm ý hướng dẫn của ongke0711:

Tôi không dùng bài của bạn để ví dụ, vì những gì hướng dẫn dưới đây có lẽ sẽ giúp bạn nhiều hơn nửa.


Giả sử
: có 2 table
TableA có các Mahang: 001, 002, 003.
TableB có các mahang: 001, 004, 005.

1. Tôi muốn hiện record nào trùng file mahang giữa 2 table A và B .
Mã PHP:
SELECT MaHang FROM TableA WHERE MaHang In (select MaHang from TableB)

Union
SELECT MaHang FROM TableB WHERE MaHang In 
(select MaHang from TableA
 

Kết quả: 001


2. Lọc ra những record không trùng giữa 2 table A và B .
Mã PHP:
SELECT MaHang FROM TableA WHERE MaHang Not In (select MaHang from TableB)
Union
SELECT MaHang FROM TableB WHERE MaHang Not In 
(select MaHang from TableA); 
 
Kết quả: 002,003,004,005

3/ -Làm thế nào để Hợp nhất hai table A và B (các record trùng nhau sẽ thành 1 record)
Mã PHP:
SELECT MaHang FROM TableA 
Union
SELECT MaHang FROM TableB 


Kết quả: 001,002,003,004,005

4/ Làm thế nào lấy tổng hợp tất cả các record không quan tâm chúng có trùng mã hay không?

Mã PHP:
 SELECT MaHang FROM TableA 
Union All
SELECT MaHang FROM TableB 


 Kết quả: 001,001,002,003,004,005


* Và đây là hướng dẫn về hàm UNION

Mô tả: 
UNION được sử dụng để kết hợp kết quả của hai hoặc nhiều lệnh SELECT mà không trả về bất cứ bản sao nào của bản ghi.
UNION ALL được sử dụng để kết hợp nhiều kết quả của hai lệnh SELECT bao gồm cả các bản sao của các hàng.

Để sử dụng UNION, mỗi lệnh SELECT phải có cùng số cột đã chọn, cùng số biểu thức của các cột, cùng kiểu dữ liệu, và chúng có cùng thứ tự, nhưng chúng không cần phải có cùng độ dài.

Cú pháp

Mã PHP:
SELECT cot1 [, cot2 FROM bang1 [, bang2 ] [WHERE dieu_kien]
UNION hoặc UNION  ALL
SELECT cot1 
[, cot2 FROM bang1 [, bang2 ] [WHERE dieu_kien


Ví dụ thứ 2 nhé:
Ví dụ: Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4000000       |
|  2 | Viet    |  19 | DTVT      | 3000000     |
|  3 | Thanh   |  18 | KTDN      |  4000000      |
|  4 | Nhan    |  19 | CK        |   4500000   |
|  5 | Huong   |  20 | TCNH      |   5000000     |
+----+---------+-----+-----------+---------+

Bảng MUONSACH có các bản ghi sau:
+-----+---------------------+-------------+--------+
|STT  | NGAY                | SINHVIEN_ID | SOTIEN |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   320 |
| 100 | 2009-10-08 00:00:00 |           3 |   250 |
| 101 | 2009-11-20 00:00:00 |           2 |   280 |
| 103 | 2008-05-20 00:00:00 |           4 |   290 |
+-----+---------------------+-------------+--------+

Bây giờ, kết hợp hai bảng trên trong lệnh SELECT như sau:

Mã PHP:
SELECT  IDTENSOTIENNGAY
    FROM SINHVIEN
    LEFT JOIN MUONSACH
    ON SINHVIEN
.ID MUONSACH.SINHVIEN_ID
UNION ALL
    SELECT  ID
TENSOTIENNGAY
    FROM SINHVIEN
    RIGHT JOIN MUONSACH
    ON SINHVIEN
.ID MUONSACH.SINHVIEN_ID

Ví dụ trên sẽ cho kết quả:
+------+----------+--------+---------------------+
| ID   | TEN     | SOTIEN | NGAY                |
+------+----------+--------+---------------------+
|    1 | Hoang   |   NULL | NULL                |
|    2 | Viet   |   280 | 2009-11-20 00:00:00 |
|    3 | Thanh  |   320 | 2009-10-08 00:00:00 |
|    3 | Thanh  |   250 | 2009-10-08 00:00:00 |
|    4 | Nhan |   290 | 2008-05-20 00:00:00 |
|    5 | Huong   |   NULL | NULL                |
|    3 | Thanh  |   320 | 2009-10-08 00:00:00 |
|    3 | Thanh  |   250 | 2009-10-08 00:00:00 |
|    2 | Viet   |   280 | 2009-11-20 00:00:00 |
|    4 | Nhan |   290 | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

* Ghi chú: Bạn thấy ví dụ trên xuất hiện hàm mới: LEFT JOIN VÀ RIGHT JOIN : Mệnh đề Join trong SQL dùng để kết nối các bảng, view, sub query lại với nhau thông qua các foreign key hoặc các cột có giá trị tương ứng ở cả hai bảng, view hoặc các sub query.

[Hình: b03d6794fb787492bea0f41a8144a37d.jpg]

Nhìn hình có thể định nghĩa nó là gì? hoặc mình sẽ viết tiếp một bài khác, vì hơi bị dài dòng rồi

Thân!
[/b]
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ongke0711 , khoidong
#4
Xin chân thành cảm ơn 2 anh (ongke0711 và maidinhdan) nhưng trong dữ liệu của em ở đây là mục Mã (ID) của Sosach thì có, còn ThucTe thi không có nên em chỉ lấy được 2 trường NguyenGia và NSD để so sánh thôi. Em mới nghỉ thêm một giải pháp nữa là so sánh từng recor nếu trùng thì di chuyển vào một table khác, những recor không trùng thì còn lại, nhưng chưa biết làm sao, các anh có thể hướng dẫn thêm được không. 
                                                                                                                  Xin chân thành cảm ơn!
Chữ ký của khoidong khoidong,gia nhập Thủ Thuật Access từ 25-04 -16.
Reply
Những người đã cảm ơn
#5
(27-04-16, 09:06 AM)khoidong Đã viết: Xin chân thành cảm ơn 2 anh (ongke0711 và maidinhdan) nhưng trong dữ liệu của em ở đây là mục Mã (ID) của Sosach thì có, còn ThucTe thi không có nên em chỉ lấy được 2 trường NguyenGia và NSD để so sánh thôi. Em mới nghỉ thêm một giải pháp nữa là so sánh từng recor nếu trùng thì di chuyển vào một table khác, những recor không trùng thì còn lại, nhưng chưa biết làm sao, các anh có thể hướng dẫn thêm được không. 
                                                                                                                  Xin chân thành cảm ơn!

Một lần nửa đề nghị bạn thay tiêu đề bài viết.

Bài bạn vẫn đúng như ý hướng dẫn trên, Ở câu hỏi đầu rõ ràng bạn ghi là có 2 table Sosanh voi Thucte... đến câu này ghi là không có table Thucte. đến đây bạn lại đăt thêm giả thuyết nửa...và sẽ còn bao nhiêu cái giả thuyết nửa đây....

Đề xuất, hãy bắt tay vào làm...mọi suy nghĩ nó sẽ vụt bay và quên hết thôi.

Thân!
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Che_Guevara
#6
Ở đây em nói là trường Mã (ID) chỉ có ở table Sosach chứ không có trường Mã (ID) trong table ThucTe.
Em đã sửa tiêu đề rồi nhưng không biết có được kg. Mong anh thông cảm. Cảm ơn
Chữ ký của khoidong khoidong,gia nhập Thủ Thuật Access từ 25-04 -16.
Reply
Những người đã cảm ơn
#7
Như tôi đề cập bạn đầu, về tổng thể bài toán bạn cần giải quyết là gì? Bạn nói rõ hơn để trước khi bắt tay vô xử lý. Giống như phải có chiến lược cho vấn đề của bạn trước khi lập kế hoạch hành động (là dùng cách gì, query ra sao...).
Khi có chiến luợc giải bài rồi thì bắt tay tổ chức CSDL cho phù hợp (Ví dụ: có thể thêm trường phụ khi import dữ liẹu, khi nhập liệu để phục vụ cho việc so sánh sau này v.v..).
Tôi góp ý để tránh việc hướng dẫn xử lý các query này cho bạn xong thì sau đó phát sinh là không hoặc chưa đủ để giải quyết bài toán của bạn, lại phải làm cách khác nữa...
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
Ở đây em muốn làm so sánh dữ liệu trùng và khác nhau giữa 2 table như sau:
Table Sosach: ID, NhomTSCD, NguyenGia, NSD, TenTS, DiaChi
Table ThucTe: ID, NguyenGia, NSD, TenTS, DiaChi, SoLuong, GhiChu

Do cả 2 table Mã (ID-Số tự động) không trùng nhau, mà table Sosanh có NhomTSCD mà table ThucTe không có NhomTSCD nên em phải lấy trường NguyenGia và NSD để so sánh nên xảy ra trường hợp như sau không so sánh được: 
Bảng SoSach:
TenTS     NSD     NguyenGia
MT         2013     11.000.000
MT         2013     11.000.000

Bảng ThucTe
TenTS    NSD     NguyenGia
MT         2013    11.000.000
MT         2013    11.000.000
MT         2013    11.000.000

Ở đây em muốn tìm:
1 - Em muốn tìm 2 dòng giống nhau:
TenTS     NSD     NguyenGia
MT         2013     11.000.000
MT         2013     11.000.000

2 - Và 1 dòng không trùng
TenTS    NSD     NguyenGia
MT         2013    11.000.000


Em đã làm union rồi nhưng không được nên mới xin sự giúp đỡ của các anh. Xin chân thành cảm ơn!
Chữ ký của khoidong khoidong,gia nhập Thủ Thuật Access từ 25-04 -16.
Reply
Những người đã cảm ơn
#9
Thông thường thì TSCĐ trong cty thường được đánh mã số từng món để quản lý, kiểm kê chứ không đơn thuần là số thứ tự và tên. Nếu file bạn sử dụng trường ID để phân biệt các tài sản với nhau thì khi nhập bảng [Thực tế] cũng phải sử dụng đúng các ID này để nhập số lương kiểm thực tế. Từ đó dùng trường ID này để query.
Đây là CSDL có sẳn hay bạn đang thiết kế?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
Đây là 2 file excel trong thực tế em import vào access.
Chữ ký của khoidong khoidong,gia nhập Thủ Thuật Access từ 25-04 -16.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Lọc query có điều kiện để tạo report honglv157 3 160 01-12-16, 05:15 PM
Bài mới nhất: maidinhdan
  [Help] ẩn nút ""Close Windown" khi mở query tronghieu9792 4 86 30-11-16, 09:36 PM
Bài mới nhất: tronghieu9792
Question [Help] Cần giúp đỡ tạo query lấy giá trị của dòng liền trước để tính giá trị trung bình luonguct 4 89 23-11-16, 12:33 AM
Bài mới nhất: luonguct
  Hướng Dẫn hướng dẫn làm query tieuho828 6 150 21-11-16, 12:36 AM
Bài mới nhất: toancvp
  Thay thế giá trị từ cột này sang cột khác trong 1 query trungminh 6 139 08-11-16, 03:24 PM
Bài mới nhất: ongke0711

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ