Xin hỏi về inner join 2 bảng

Liên hệ QC

kyo

Nguyễn Khắc Duy
Thành viên danh dự
Tham gia
4/6/06
Bài viết
901
Được thích
2,716
Xin chào mọi người,

Mong mọi người giúp kyo join hai bảng này nhưng không bị double dữ liệu.
Hiện tại kyo đang bị vướng ở chỗ bảng 1 có 2 nội dung là a và b nhưng kyo không biết làm sao để có thể bỏ qua cột nay mà join những cột còn lại của bảng. Những cột có số thì dùng SUM, cột Id thì là điều kiện bảng (Id bảng 1 = Id bảng 2) nhưng riêng nội dung a với b khiến cho dữ liệu bị double lên.

Mong mọi người giúp đỡ.

Xin cảm ơn!
 

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    19.4 KB · Đọc: 65
Xin chào mọi người,

Mong mọi người giúp kyo join hai bảng này nhưng không bị double dữ liệu.
Hiện tại kyo đang bị vướng ở chỗ bảng 1 có 2 nội dung là a và b nhưng kyo không biết làm sao để có thể bỏ qua cột nay mà join những cột còn lại của bảng. Những cột có số thì dùng SUM, cột Id thì là điều kiện bảng (Id bảng 1 = Id bảng 2) nhưng riêng nội dung a với b khiến cho dữ liệu bị double lên.

Mong mọi người giúp đỡ.

Xin cảm ơn!

Vậy kết quả cuối cùng nó sẽ như thế nào?
 
Kết quả cuối cùng kyo muốn là ID = 1, stt = 2000, value = 15, content = test, dt = 2000. Nghĩa là kyo không quan tâm cột noidung là a hay b mà hiện tại kyo đang bị vướng chỗ này nên không biết giải quyết làm sao.
 
Bạn thử câu truy vấn này xem
Mã:
SELECT T1.*,T2.content,T2.dt FROM  (SELECT ID,SUM(stt) AS stt,SUM(value) AS value FROM table1 GROUP BY ID) T1
           INNER JOIN table2 T2 ON T1.ID=T2.ID
 
Bạn thử câu truy vấn này xem
Mã:
SELECT T1.*,T2.content,T2.dt FROM  (SELECT ID,SUM(stt) AS stt,SUM(value) AS value FROM table1 GROUP BY ID) T1
           INNER JOIN table2 T2 ON T1.ID=T2.ID

the select statement includes a reserved word or an argument name that is misspelled or missing

Cảm ơn bạn, nhưng Access báo lỗi này bạn ơi!
 
the select statement includes a reserved word or an argument name that is misspelled or missing

Cảm ơn bạn, nhưng Access báo lỗi này bạn ơi!
Do tên trường value lại trùng với từ khóa, câu truy vấn này không phù hợp với Access nhưng 1 số CSDL khác thì được. Có thể xóa AS value và AS stt đi hoặc sửa thành
Mã:
SELECT T1.ID,SUM(T1.stt),SUM(T1.value),T2.content,T2.dt FROM table1 T1 
INNER JOIN table2 T2 ON T1.ID=T2.ID GROUP BY T1.ID,T2.content,T2.dt
 
Lần chỉnh sửa cuối:
Xin chào mọi người,

Mong mọi người giúp kyo join hai bảng này nhưng không bị double dữ liệu.
Hiện tại kyo đang bị vướng ở chỗ bảng 1 có 2 nội dung là a và b nhưng kyo không biết làm sao để có thể bỏ qua cột nay mà join những cột còn lại của bảng. Những cột có số thì dùng SUM, cột Id thì là điều kiện bảng (Id bảng 1 = Id bảng 2) nhưng riêng nội dung a với b khiến cho dữ liệu bị double lên.

Mong mọi người giúp đỡ.

Xin cảm ơn!

Lưu ý tên trường không nên đặt là những từ đặt biệt như date, value...

Kyo nên thử với đoạn query sau:
Mã:
SELECT T2.ID, Q1.SumOf_stt, Q1.SumOf_value, T2.content, T2.[_dt]
FROM T2 INNER JOIN (SELECT [T1].ID, Sum([T1].[_stt]) AS SumOf_stt, Sum([T1].[_value]) AS SumOf_value FROM T1 GROUP BY [T1].ID)  AS Q1 ON T2.ID = Q1.ID;

Xem thêm file đính kèm nhé.
 

File đính kèm

  • Test.rar
    11.9 KB · Đọc: 11
Lưu ý tên trường không nên đặt là những từ đặt biệt như date, value...

Kyo nên thử với đoạn query sau:
Mã:
SELECT T2.ID, Q1.SumOf_stt, Q1.SumOf_value, T2.content, T2.[_dt]
FROM T2 INNER JOIN (SELECT [T1].ID, Sum([T1].[_stt]) AS SumOf_stt, Sum([T1].[_value]) AS SumOf_value FROM T1 GROUP BY [T1].ID)  AS Q1 ON T2.ID = Q1.ID;

Xem thêm file đính kèm nhé.

Cảm ơn anh Hai Lúa Miền Tây nhiều! Kyo cũng áp dụng tương tự như anh vào đoạn code dưới đây mà gặp lỗi là: ORA-00905: missing keyword, không biết phải sửa thế nào, mong anh giúp đỡ!

Kyo sử dụng Oracle, và nó báo lỗi ở dòng 29 (theo như nó ghi là vậy) là dòng mà kyo đã tô đậm.


Mã:
SELECT Q1.LINE, Q1.PROCESS, Q1.PRODDATE, Q1.SHIFT, Q1.TEAM, Q1.BUNDLE, Q1.MONTH, Q1.RD_EMO_MIN, Q1.NO_PROD_RQD_MIN, Q1.HOLIDAY_MIN, Q1.BUS_EXT_MIN,
        Q1.PLT_DEC_MIN, Q1.PLAN_MAINT_MIN, Q1.CHG_OVER_MIN, Q1.CLEAN_SANIT_MIN, Q1.MTG_TRAIN_MIN, Q1.BRK_LUNCH_MIN, Q1.PLT_EXPER_MIN,
        Q1.PROD_MIN, Q1.RUNTIME, Q1.EFRTMIN, Q1.OUTPUT, Q1.SCRAP, Q1.SCRAPPKG,
        SFDB.MONTHLY_DT_V.SHIFT AS SHIFT2, SFDB.MONTHLY_DT_V.LINE AS LINE2,
        SFDB.MONTHLY_DT_V.BUNDLE AS BUNDLE2, SFDB.MONTHLY_DT_V.PRODDATE AS PRODDATE2,
        SFDB.MONTHLY_DT_V.EQMT, SFDB.MONTHLY_DT_V.SECTION,
 SUM(SFDB.MONTHLY_DT_V.DOWNTIME) AS DOWNTIME, SFDB.MONTHLY_DT_V.COMMENTS
FROM SFDB.MONTHLY_DT_V INNER JOIN 
(SELECT SFDB.YEARLY_AE_MODEL_V.LINE, SFDB.YEARLY_AE_MODEL_V.PROCESS, SFDB.YEARLY_AE_MODEL_V.PRODDATE, SFDB.YEARLY_AE_MODEL_V.SHIFT, 
 SFDB.YEARLY_AE_MODEL_V.TEAM, SFDB.YEARLY_AE_MODEL_V.BUNDLE, SFDB.YEARLY_AE_MODEL_V.MONTH,
 SUM(SFDB.YEARLY_AE_MODEL_V.RD_EMO_MIN) AS RD_EMO_MIN, 
        SUM(SFDB.YEARLY_AE_MODEL_V.NO_PROD_RQD_MIN) AS NO_PROD_RQD_MIN, 
        SUM(SFDB.YEARLY_AE_MODEL_V.HOLIDAY_MIN) AS HOLIDAY_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.BUS_EXT_MIN) AS BUS_EXT_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLT_DEC_MIN) AS PLT_DEC_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLAN_MAINT_MIN) AS PLAN_MAINT_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.CHG_OVER_MIN) AS CHG_OVER_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.CLEAN_SANIT_MIN) AS CLEAN_SANIT_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.MTG_TRAIN_MIN) AS MTG_TRAIN_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.BRK_LUNCH_MIN) AS BRK_LUNCH_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLT_EXPER_MIN) AS PLT_EXPER_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PROD_MIN) AS PROD_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.RUNTIME) AS RUNTIME,
        SUM(SFDB.YEARLY_AE_MODEL_V.EFRTMIN) AS EFRTMIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.OUTPUT) AS OUTPUT,
 SUM(SFDB.YEARLY_AE_MODEL_V.SCRAP) AS SCRAP,
        SUM(SFDB.YEARLY_AE_MODEL_V.SCRAPPKG) AS SCRAPPKG FROM SFDB.YEARLY_AE_MODEL_V
 GROUP BY SFDB.YEARLY_AE_MODEL_V.LINE, SFDB.YEARLY_AE_MODEL_V.PROCESS, SFDB.YEARLY_AE_MODEL_V.PRODDATE, SFDB.YEARLY_AE_MODEL_V.SHIFT, 
  S[B]FDB.YEARLY_AE_MODEL_V.TEAM, SFDB.YEARLY_AE_MODEL_V.BUNDLE, SFDB.YEARLY_AE_MODEL_V.MONTH) AS Q1[/B]
ON Q1.LINE = SFDB.MONTHLY_DT_V.LINE AND Q1.PRODDATE = SFDB.MONTHLY_DT_V.PRODDATE AND
 Q1.SHIFT = SFDB.MONTHLY_DT_V.SHIFT AND Q1.TEAM = SFDB.MONTHLY_DT_V.TEAM AND
 Q1.BUNDLE = SFDB.MONTHLY_DT_V.BUNDLE
GROUP BY Q1.LINE, Q1.PROCESS, Q1.PRODDATE, Q1.SHIFT, Q1.TEAM, Q1.BUNDLE, Q1.MONTH, Q1.RD_EMO_MIN, Q1.NO_PROD_RQD_MIN, Q1.HOLIDAY_MIN,
 Q1.BUS_EXT_MIN, Q1.PLT_DEC_MIN, Q1.PLAN_MAINT_MIN, Q1.CHG_OVER_MIN, Q1.CLEAN_SANIT_MIN, Q1.MTG_TRAIN_MIN, Q1.BRK_LUNCH_MIN,
        Q1.PLT_EXPER_MIN, Q1.PROD_MIN, Q1.RUNTIME, Q1.EFRTMIN, Q1.OUTPUT, Q1.SCRAP, Q1.SCRAPPKG, 
        SFDB.MONTHLY_DT_V.SHIFT, SFDB.MONTHLY_DT_V.LINE, SFDB.MONTHLY_DT_V.BUNDLE, SFDB.MONTHLY_DT_V.PRODDATE,
 SFDB.MONTHLY_DT_V.EQMT, SFDB.MONTHLY_DT_V.SECTION, SFDB.MONTHLY_DT_V.COMMENTS
 
Lần chỉnh sửa cuối:
Nhìn thì khó có thể phát hiện được lỗi gì, Kyo có test thử từng subquery trước khi nối vào? Có thể do bị lỗi tên trường là những từ nên tránh như đã đề cập?

Format lại cái query cho dễ nhìn.

PHP:
 SELECT Q1.LINE, 
       Q1.PROCESS, 
       Q1.PRODDATE, 
       Q1.SHIFT, 
       Q1.TEAM, 
       Q1.BUNDLE, 
       Q1.[MONTH], 
       Q1.RD_EMO_MIN, 
       Q1.NO_PROD_RQD_MIN, 
       Q1.HOLIDAY_MIN, 
       Q1.BUS_EXT_MIN, 
       Q1.PLT_DEC_MIN, 
       Q1.PLAN_MAINT_MIN, 
       Q1.CHG_OVER_MIN, 
       Q1.CLEAN_SANIT_MIN, 
       Q1.MTG_TRAIN_MIN, 
       Q1.BRK_LUNCH_MIN, 
       Q1.PLT_EXPER_MIN, 
       Q1.PROD_MIN, 
       Q1.RUNTIME, 
       Q1.EFRTMIN, 
       Q1.OUTPUT, 
       Q1.SCRAP, 
       Q1.SCRAPPKG, 
       sfdb.MONTHLY_DT_V.SHIFT         AS SHIFT2, 
       sfdb.MONTHLY_DT_V.LINE          AS LINE2, 
       sfdb.MONTHLY_DT_V.BUNDLE        AS BUNDLE2, 
       sfdb.MONTHLY_DT_V.PRODDATE      AS PRODDATE2, 
       sfdb.MONTHLY_DT_V.EQMT, 
       sfdb.MONTHLY_DT_V.[SECTION], 
       SUM(sfdb.MONTHLY_DT_V.DOWNTIME) AS DOWNTIME, 
       sfdb.MONTHLY_DT_V.COMMENTS 
FROM   sfdb.MONTHLY_DT_V 
       inner join (SELECT sfdb.YEARLY_AE_MODEL_V.LINE, 
                          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
                          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
                          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
                          sfdb.YEARLY_AE_MODEL_V.TEAM, 
                          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
                          sfdb.YEARLY_AE_MODEL_V.[MONTH], 
                          SUM(sfdb.YEARLY_AE_MODEL_V.RD_EMO_MIN)      AS  RD_EMO_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.NO_PROD_RQD_MIN) AS  NO_PROD_RQD_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.HOLIDAY_MIN)     AS  HOLIDAY_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.BUS_EXT_MIN)     AS  BUS_EXT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLT_DEC_MIN)     AS  PLT_DEC_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLAN_MAINT_MIN)  AS  PLAN_MAINT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.CHG_OVER_MIN)    AS CHG_OVER_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.CLEAN_SANIT_MIN) AS CLEAN_SANIT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.MTG_TRAIN_MIN)   AS MTG_TRAIN_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.BRK_LUNCH_MIN)   AS BRK_LUNCH_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLT_EXPER_MIN)   AS PLT_EXPER_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PROD_MIN)        AS PROD_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.RUNTIME)         AS RUNTIME, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.EFRTMIN)         AS EFRTMIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.OUTPUT)          AS OUTPUT, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.SCRAP)           AS SCRAP, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.SCRAPPKG)        AS SCRAPPKG 
       FROM   sfdb.YEARLY_AE_MODEL_V 
       GROUP  BY sfdb.YEARLY_AE_MODEL_V.LINE, 
          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
          sfdb.YEARLY_AE_MODEL_V.TEAM, 
          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
          sfdb.YEARLY_AE_MODEL_V.[MONTH]) AS Q1 
               ON Q1.LINE = sfdb.MONTHLY_DT_V.LINE 
                  AND Q1.PRODDATE = sfdb.MONTHLY_DT_V.PRODDATE 
                  AND Q1.SHIFT = sfdb.MONTHLY_DT_V.SHIFT 
                  AND Q1.TEAM = sfdb.MONTHLY_DT_V.TEAM 
                  AND Q1.BUNDLE = sfdb.MONTHLY_DT_V.BUNDLE 
GROUP  BY Q1.LINE, 
          Q1.PROCESS, 
          Q1.PRODDATE, 
          Q1.SHIFT, 
          Q1.TEAM, 
          Q1.BUNDLE, 
          Q1.[MONTH], 
          Q1.RD_EMO_MIN, 
          Q1.NO_PROD_RQD_MIN, 
          Q1.HOLIDAY_MIN, 
          Q1.BUS_EXT_MIN, 
          Q1.PLT_DEC_MIN, 
          Q1.PLAN_MAINT_MIN, 
          Q1.CHG_OVER_MIN, 
          Q1.CLEAN_SANIT_MIN, 
          Q1.MTG_TRAIN_MIN, 
          Q1.BRK_LUNCH_MIN, 
          Q1.PLT_EXPER_MIN, 
          Q1.PROD_MIN, 
          Q1.RUNTIME, 
          Q1.EFRTMIN, 
          Q1.OUTPUT, 
          Q1.SCRAP, 
          Q1.SCRAPPKG, 
          sfdb.MONTHLY_DT_V.SHIFT, 
          sfdb.MONTHLY_DT_V.LINE, 
          sfdb.MONTHLY_DT_V.BUNDLE, 
          sfdb.MONTHLY_DT_V.PRODDATE, 
          sfdb.MONTHLY_DT_V.EQMT, 
          sfdb.MONTHLY_DT_V.[SECTION], 
          sfdb.MONTHLY_DT_V.COMMENTS
 
Lần chỉnh sửa cuối:
Nhìn thì khó có thể phát hiện được lỗi gì, Kyo có test thử từng subquery trước khi nối vào? Mà nó báo lỗi như thế nào vậy Kyo?

Format lại cái query cho dễ nhìn.

PHP:
 SELECT Q1.LINE, 
       Q1.PROCESS, 
       Q1.PRODDATE, 
       Q1.SHIFT, 
       Q1.TEAM, 
       Q1.BUNDLE, 
       Q1.MONTH, 
       Q1.RD_EMO_MIN, 
       Q1.NO_PROD_RQD_MIN, 
       Q1.HOLIDAY_MIN, 
       Q1.BUS_EXT_MIN, 
       Q1.PLT_DEC_MIN, 
       Q1.PLAN_MAINT_MIN, 
       Q1.CHG_OVER_MIN, 
       Q1.CLEAN_SANIT_MIN, 
       Q1.MTG_TRAIN_MIN, 
       Q1.BRK_LUNCH_MIN, 
       Q1.PLT_EXPER_MIN, 
       Q1.PROD_MIN, 
       Q1.RUNTIME, 
       Q1.EFRTMIN, 
       Q1.OUTPUT, 
       Q1.SCRAP, 
       Q1.SCRAPPKG, 
       sfdb.MONTHLY_DT_V.SHIFT         AS SHIFT2, 
       sfdb.MONTHLY_DT_V.LINE          AS LINE2, 
       sfdb.MONTHLY_DT_V.BUNDLE        AS BUNDLE2, 
       sfdb.MONTHLY_DT_V.PRODDATE      AS PRODDATE2, 
       sfdb.MONTHLY_DT_V.EQMT, 
       sfdb.MONTHLY_DT_V.SECTION, 
       SUM(sfdb.MONTHLY_DT_V.DOWNTIME) AS DOWNTIME, 
       sfdb.MONTHLY_DT_V.COMMENTS 
FROM   sfdb.MONTHLY_DT_V 
       inner join (SELECT sfdb.YEARLY_AE_MODEL_V.LINE, 
                          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
                          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
                          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
                          sfdb.YEARLY_AE_MODEL_V.TEAM, 
                          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
                          sfdb.YEARLY_AE_MODEL_V.MONTH, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.RD_EMO_MIN)      AS  RD_EMO_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.NO_PROD_RQD_MIN) AS  NO_PROD_RQD_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.HOLIDAY_MIN)     AS  HOLIDAY_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.BUS_EXT_MIN)     AS  BUS_EXT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLT_DEC_MIN)     AS  PLT_DEC_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLAN_MAINT_MIN)  AS  PLAN_MAINT_MIN 
                                                   , 
       SUM(sfdb.YEARLY_AE_MODEL_V.CHG_OVER_MIN)    AS CHG_OVER_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.CLEAN_SANIT_MIN) AS CLEAN_SANIT_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.MTG_TRAIN_MIN)   AS MTG_TRAIN_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.BRK_LUNCH_MIN)   AS BRK_LUNCH_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.PLT_EXPER_MIN)   AS PLT_EXPER_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.PROD_MIN)        AS PROD_MIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.RUNTIME)         AS RUNTIME, 
       SUM(sfdb.YEARLY_AE_MODEL_V.EFRTMIN)         AS EFRTMIN, 
       SUM(sfdb.YEARLY_AE_MODEL_V.OUTPUT)          AS OUTPUT, 
       SUM(sfdb.YEARLY_AE_MODEL_V.SCRAP)           AS SCRAP, 
       SUM(sfdb.YEARLY_AE_MODEL_V.SCRAPPKG)        AS SCRAPPKG 
       FROM   sfdb.YEARLY_AE_MODEL_V 
       GROUP  BY sfdb.YEARLY_AE_MODEL_V.LINE, 
          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
          sfdb.YEARLY_AE_MODEL_V.TEAM, 
          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
          sfdb.YEARLY_AE_MODEL_V.MONTH) AS Q1 
               ON Q1.LINE = sfdb.MONTHLY_DT_V.LINE 
                  AND Q1.PRODDATE = sfdb.MONTHLY_DT_V.PRODDATE 
                  AND Q1.SHIFT = sfdb.MONTHLY_DT_V.SHIFT 
                  AND Q1.TEAM = sfdb.MONTHLY_DT_V.TEAM 
                  AND Q1.BUNDLE = sfdb.MONTHLY_DT_V.BUNDLE 
GROUP  BY Q1.LINE, 
          Q1.PROCESS, 
          Q1.PRODDATE, 
          Q1.SHIFT, 
          Q1.TEAM, 
          Q1.BUNDLE, 
          Q1.MONTH, 
          Q1.RD_EMO_MIN, 
          Q1.NO_PROD_RQD_MIN, 
          Q1.HOLIDAY_MIN, 
          Q1.BUS_EXT_MIN, 
          Q1.PLT_DEC_MIN, 
          Q1.PLAN_MAINT_MIN, 
          Q1.CHG_OVER_MIN, 
          Q1.CLEAN_SANIT_MIN, 
          Q1.MTG_TRAIN_MIN, 
          Q1.BRK_LUNCH_MIN, 
          Q1.PLT_EXPER_MIN, 
          Q1.PROD_MIN, 
          Q1.RUNTIME, 
          Q1.EFRTMIN, 
          Q1.OUTPUT, 
          Q1.SCRAP, 
          Q1.SCRAPPKG, 
          sfdb.MONTHLY_DT_V.SHIFT, 
          sfdb.MONTHLY_DT_V.LINE, 
          sfdb.MONTHLY_DT_V.BUNDLE, 
          sfdb.MONTHLY_DT_V.PRODDATE, 
          sfdb.MONTHLY_DT_V.EQMT, 
          sfdb.MONTHLY_DT_V.SECTION, 
          sfdb.MONTHLY_DT_V.COMMENTS
ai viết câu truy vấn này chắc là thiên tài rồi, từ khi tôi bắt đầu học môn CSDL đến bây giờ là gần 10 năm mà vẫn chưa thấy câu truy vấn nào dài bằng 1/2 Câu truy vấn trên
 
Lần chỉnh sửa cuối:
Câu truy vấn này dài nhưng không phải vì nó phức tạp mà vì do có nhiều trường thôi. Đối với câu này bạn bỏ AS ở chỗ "INNER JOIN (.....) AS Q1" thành "INNER JOIN (....) Q1" đi xem. Alias for table không có từ khóa AS.
 
Lần chỉnh sửa cuối:
Cảm ơn anh Hai Lúa Miền Tây nhiều! Kyo cũng áp dụng tương tự như anh vào đoạn code dưới đây mà gặp lỗi là: ORA-00905: missing keyword, không biết phải sửa thế nào, mong anh giúp đỡ!

Kyo sử dụng Oracle, và nó báo lỗi ở dòng 29 (theo như nó ghi là vậy) là dòng mà kyo đã tô đậm.


Mã:
SELECT Q1.LINE, Q1.PROCESS, Q1.PRODDATE, Q1.SHIFT, Q1.TEAM, Q1.BUNDLE, Q1.MONTH, Q1.RD_EMO_MIN, Q1.NO_PROD_RQD_MIN, Q1.HOLIDAY_MIN, Q1.BUS_EXT_MIN,
        Q1.PLT_DEC_MIN, Q1.PLAN_MAINT_MIN, Q1.CHG_OVER_MIN, Q1.CLEAN_SANIT_MIN, Q1.MTG_TRAIN_MIN, Q1.BRK_LUNCH_MIN, Q1.PLT_EXPER_MIN,
        Q1.PROD_MIN, Q1.RUNTIME, Q1.EFRTMIN, Q1.OUTPUT, Q1.SCRAP, Q1.SCRAPPKG,
        SFDB.MONTHLY_DT_V.SHIFT AS SHIFT2, SFDB.MONTHLY_DT_V.LINE AS LINE2,
        SFDB.MONTHLY_DT_V.BUNDLE AS BUNDLE2, SFDB.MONTHLY_DT_V.PRODDATE AS PRODDATE2,
        SFDB.MONTHLY_DT_V.EQMT, SFDB.MONTHLY_DT_V.SECTION,
 SUM(SFDB.MONTHLY_DT_V.DOWNTIME) AS DOWNTIME, SFDB.MONTHLY_DT_V.COMMENTS
FROM SFDB.MONTHLY_DT_V INNER JOIN 
(SELECT SFDB.YEARLY_AE_MODEL_V.LINE, SFDB.YEARLY_AE_MODEL_V.PROCESS, SFDB.YEARLY_AE_MODEL_V.PRODDATE, SFDB.YEARLY_AE_MODEL_V.SHIFT, 
 SFDB.YEARLY_AE_MODEL_V.TEAM, SFDB.YEARLY_AE_MODEL_V.BUNDLE, SFDB.YEARLY_AE_MODEL_V.MONTH,
 SUM(SFDB.YEARLY_AE_MODEL_V.RD_EMO_MIN) AS RD_EMO_MIN, 
        SUM(SFDB.YEARLY_AE_MODEL_V.NO_PROD_RQD_MIN) AS NO_PROD_RQD_MIN, 
        SUM(SFDB.YEARLY_AE_MODEL_V.HOLIDAY_MIN) AS HOLIDAY_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.BUS_EXT_MIN) AS BUS_EXT_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLT_DEC_MIN) AS PLT_DEC_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLAN_MAINT_MIN) AS PLAN_MAINT_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.CHG_OVER_MIN) AS CHG_OVER_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.CLEAN_SANIT_MIN) AS CLEAN_SANIT_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.MTG_TRAIN_MIN) AS MTG_TRAIN_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.BRK_LUNCH_MIN) AS BRK_LUNCH_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PLT_EXPER_MIN) AS PLT_EXPER_MIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.PROD_MIN) AS PROD_MIN,
 SUM(SFDB.YEARLY_AE_MODEL_V.RUNTIME) AS RUNTIME,
        SUM(SFDB.YEARLY_AE_MODEL_V.EFRTMIN) AS EFRTMIN,
        SUM(SFDB.YEARLY_AE_MODEL_V.OUTPUT) AS OUTPUT,
 SUM(SFDB.YEARLY_AE_MODEL_V.SCRAP) AS SCRAP,
        SUM(SFDB.YEARLY_AE_MODEL_V.SCRAPPKG) AS SCRAPPKG FROM SFDB.YEARLY_AE_MODEL_V
 GROUP BY SFDB.YEARLY_AE_MODEL_V.LINE, SFDB.YEARLY_AE_MODEL_V.PROCESS, SFDB.YEARLY_AE_MODEL_V.PRODDATE, SFDB.YEARLY_AE_MODEL_V.SHIFT, 
  S[B]FDB.YEARLY_AE_MODEL_V.TEAM, SFDB.YEARLY_AE_MODEL_V.BUNDLE, SFDB.YEARLY_AE_MODEL_V.MONTH) AS Q1[/B]
ON Q1.LINE = SFDB.MONTHLY_DT_V.LINE AND Q1.PRODDATE = SFDB.MONTHLY_DT_V.PRODDATE AND
 Q1.SHIFT = SFDB.MONTHLY_DT_V.SHIFT AND Q1.TEAM = SFDB.MONTHLY_DT_V.TEAM AND
 Q1.BUNDLE = SFDB.MONTHLY_DT_V.BUNDLE
GROUP BY Q1.LINE, Q1.PROCESS, Q1.PRODDATE, Q1.SHIFT, Q1.TEAM, Q1.BUNDLE, Q1.MONTH, Q1.RD_EMO_MIN, Q1.NO_PROD_RQD_MIN, Q1.HOLIDAY_MIN,
 Q1.BUS_EXT_MIN, Q1.PLT_DEC_MIN, Q1.PLAN_MAINT_MIN, Q1.CHG_OVER_MIN, Q1.CLEAN_SANIT_MIN, Q1.MTG_TRAIN_MIN, Q1.BRK_LUNCH_MIN,
        Q1.PLT_EXPER_MIN, Q1.PROD_MIN, Q1.RUNTIME, Q1.EFRTMIN, Q1.OUTPUT, Q1.SCRAP, Q1.SCRAPPKG, 
        SFDB.MONTHLY_DT_V.SHIFT, SFDB.MONTHLY_DT_V.LINE, SFDB.MONTHLY_DT_V.BUNDLE, SFDB.MONTHLY_DT_V.PRODDATE,
 SFDB.MONTHLY_DT_V.EQMT, SFDB.MONTHLY_DT_V.SECTION, SFDB.MONTHLY_DT_V.COMMENTS
Tạm chỉnh lại như sau, Kyo test thử xem kết quả thế nào nhé.

PHP:
 SELECT QUERY1.LINE, 
       QUERY1.PROCESS, 
       QUERY1.PRODDATE, 
       QUERY1.SHIFT, 
       QUERY1.TEAM, 
       QUERY1.BUNDLE, 
       QUERY1.[MONTH], 
       QUERY1.RD_EMO_MIN, 
       QUERY1.NO_PROD_RQD_MIN, 
       QUERY1.HOLIDAY_MIN, 
       QUERY1.BUS_EXT_MIN, 
       QUERY1.PLT_DEC_MIN, 
       QUERY1.PLAN_MAINT_MIN, 
       QUERY1.CHG_OVER_MIN, 
       QUERY1.CLEAN_SANIT_MIN, 
       QUERY1.MTG_TRAIN_MIN, 
       QUERY1.BRK_LUNCH_MIN, 
       QUERY1.PLT_EXPER_MIN, 
       QUERY1.PROD_MIN, 
       QUERY1.RUNTIME, 
       QUERY1.EFRTMIN, 
       QUERY1.OUTPUT, 
       QUERY1.SCRAP, 
       QUERY1.SCRAPPKG, 
       sfdb.MONTHLY_DT_V.SHIFT         AS SHIFT2, 
       sfdb.MONTHLY_DT_V.LINE          AS LINE2, 
       sfdb.MONTHLY_DT_V.BUNDLE        AS BUNDLE2, 
       sfdb.MONTHLY_DT_V.PRODDATE      AS PRODDATE2, 
       sfdb.MONTHLY_DT_V.EQMT, 
       sfdb.MONTHLY_DT_V.[SECTION], 
       SUM(sfdb.MONTHLY_DT_V.DOWNTIME) AS DOWNTIME, 
       sfdb.MONTHLY_DT_V.COMMENTS 
FROM   sfdb.MONTHLY_DT_V 
       inner join (SELECT sfdb.YEARLY_AE_MODEL_V.LINE, 
                          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
                          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
                          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
                          sfdb.YEARLY_AE_MODEL_V.TEAM, 
                          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
                          sfdb.YEARLY_AE_MODEL_V.[MONTH], 
                          SUM(sfdb.YEARLY_AE_MODEL_V.RD_EMO_MIN)      AS  RD_EMO_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.NO_PROD_RQD_MIN) AS  NO_PROD_RQD_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.HOLIDAY_MIN)     AS  HOLIDAY_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.BUS_EXT_MIN)     AS  BUS_EXT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLT_DEC_MIN)     AS  PLT_DEC_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLAN_MAINT_MIN)  AS  PLAN_MAINT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.CHG_OVER_MIN)    AS CHG_OVER_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.CLEAN_SANIT_MIN) AS CLEAN_SANIT_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.MTG_TRAIN_MIN)   AS MTG_TRAIN_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.BRK_LUNCH_MIN)   AS BRK_LUNCH_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PLT_EXPER_MIN)   AS PLT_EXPER_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.PROD_MIN)        AS PROD_MIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.RUNTIME)         AS RUNTIME, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.EFRTMIN)         AS EFRTMIN, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.OUTPUT)          AS OUTPUT, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.SCRAP)           AS SCRAP, 
                          SUM(sfdb.YEARLY_AE_MODEL_V.SCRAPPKG)        AS SCRAPPKG 
       FROM   sfdb.YEARLY_AE_MODEL_V 
       GROUP  BY sfdb.YEARLY_AE_MODEL_V.LINE, 
          sfdb.YEARLY_AE_MODEL_V.PROCESS, 
          sfdb.YEARLY_AE_MODEL_V.PRODDATE, 
          sfdb.YEARLY_AE_MODEL_V.SHIFT, 
          sfdb.YEARLY_AE_MODEL_V.TEAM, 
          sfdb.YEARLY_AE_MODEL_V.BUNDLE, 
          sfdb.YEARLY_AE_MODEL_V.[MONTH]) AS QUERY1 
               ON QUERY1.LINE = sfdb.MONTHLY_DT_V.LINE 
                  AND QUERY1.PRODDATE = sfdb.MONTHLY_DT_V.PRODDATE 
                  AND QUERY1.SHIFT = sfdb.MONTHLY_DT_V.SHIFT 
                  AND QUERY1.TEAM = sfdb.MONTHLY_DT_V.TEAM 
                  AND QUERY1.BUNDLE = sfdb.MONTHLY_DT_V.BUNDLE 
GROUP  BY QUERY1.LINE, 
          QUERY1.PROCESS, 
          QUERY1.PRODDATE, 
          QUERY1.SHIFT, 
          QUERY1.TEAM, 
          QUERY1.BUNDLE, 
          QUERY1.[MONTH], 
          QUERY1.RD_EMO_MIN, 
          QUERY1.NO_PROD_RQD_MIN, 
          QUERY1.HOLIDAY_MIN, 
          QUERY1.BUS_EXT_MIN, 
          QUERY1.PLT_DEC_MIN, 
          QUERY1.PLAN_MAINT_MIN, 
          QUERY1.CHG_OVER_MIN, 
          QUERY1.CLEAN_SANIT_MIN, 
          QUERY1.MTG_TRAIN_MIN, 
          QUERY1.BRK_LUNCH_MIN, 
          QUERY1.PLT_EXPER_MIN, 
          QUERY1.PROD_MIN, 
          QUERY1.RUNTIME, 
          QUERY1.EFRTMIN, 
          QUERY1.OUTPUT, 
          QUERY1.SCRAP, 
          QUERY1.SCRAPPKG, 
          sfdb.MONTHLY_DT_V.SHIFT, 
          sfdb.MONTHLY_DT_V.LINE, 
          sfdb.MONTHLY_DT_V.BUNDLE, 
          sfdb.MONTHLY_DT_V.PRODDATE, 
          sfdb.MONTHLY_DT_V.EQMT, 
          sfdb.MONTHLY_DT_V.[SECTION], 
          sfdb.MONTHLY_DT_V.COMMENTS
 
Câu truy vấn này dài nhưng không phải vì nó phức tạp mà vì do có nhiều trường thôi. Đối với câu này bạn bỏ AS ở chỗ "INNER JOIN (.....) AS Q1" thành "INNER JOIN (....) Q1" đi xem. Alias for table không có từ khóa AS.

Không phải lỗi chính là chổ AS đâu bạn. Vì trong câu truy vấn SQL server cho dù bạn không thêm as nó cũng "tặng" cho bạn cái as sau khi chạy query. Trường hợp đặt lại tên trường cũng thế.
 
Không phải lỗi chính là chổ AS đâu bạn. Vì trong câu truy vấn SQL server cho dù bạn không thêm as nó cũng "tặng" cho bạn cái as sau khi chạy query. Trường hợp đặt lại tên trường cũng thế.
SQL server khác, ở đây là Oracle mà. Đối với tên trường thì có as.
 
Mong mọi người giúp kyo, hiện tại kyo gặp 1 vướng mắc khác khi select điều kiện mà dữ liệu dạng text có dấu ' nên kyo không biết phải truy xuất thế nào.

Ví dụ: SELECT * FROM abc WHERE a = 'Khac'' sẽ bị báo lỗi vì SQL không hiểu text Khac' là gì.

Mong mọi người giúp kyo với.
 
Bạn sửa thành 'khac'''.
 
Web KT

Bài viết mới nhất

Back
Top Bottom