簡體   English   中英

MYSQL在來自2個字段和不同值的select語句上

[英]MYSQL on select statement from 2 fields and distinct value

select DISTINCT leg.destination,leg.departure from trktripleg leg where leg.T# IN (select T# from trktrip trip WHERE L#='10001' OR L#='10002');

上面是我執行的SQL語句...

查找兩個執照號為(L#)10001和10002的駕駛員至少訪問過一次的所有城市(出發地或目的地)的名稱。

表說明:

SQL> desc trktrip;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 T#                                        NOT NULL NUMBER(10)
 L#                                        NOT NULL NUMBER(8)
 REG#                                      NOT NULL VARCHAR2(10)
 TRKTRIP_DATE                              NOT NULL DATE

SQL> desc trktripleg;
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------------------

 T#                                        NOT NULL NUMBER(10)
 LEG#                                      NOT NULL NUMBER(2)
 DEPARTURE                                 NOT NULL VARCHAR2(30)
 DESTINATION                               NOT NULL VARCHAR2(30)

一些樣本數據:

在trktripleg上插入數據

INSERT INTO TRKTRIPLEG VALUES( 1, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES( 1, 2, 'Melbourne', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 1, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 2, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES( 2, 2, 'Melbourne', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 2, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 3, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES( 3, 2, 'Melbourne', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 3, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 4, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES( 4, 2, 'Melbourne', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 4, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 5, 1, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 5, 2, 'Sydney', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 5, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 6, 1, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 6, 2, 'Sydney', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 6, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 7, 1, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 7, 2, 'Sydney', 'Adelaide');
INSERT INTO TRKTRIPLEG VALUES( 7, 3, 'Adelaide', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES( 8, 1, 'Sydney', 'Newcastle');
INSERT INTO TRKTRIPLEG VALUES( 8, 2, 'Newcastle', 'Brisbane');
INSERT INTO TRKTRIPLEG VALUES( 8, 3, 'Brisbane', 'Rockhampton');
INSERT INTO TRKTRIPLEG VALUES( 9, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES(10, 1, 'Sydney', 'Wollongong');
INSERT INTO TRKTRIPLEG VALUES(11, 1, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES(12, 1, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES(12, 2, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES(13, 1, 'Sydney', 'Melbourne');
INSERT INTO TRKTRIPLEG VALUES(13, 2, 'Melbourne', 'Sydney');
INSERT INTO TRKTRIPLEG VALUES(14, 1, 'Wollongong', 'Sydney');

在trktrip中插入數據

INSERT INTO TRKTRIP VALUES( 1, 10001, 'PKR768', ADD_MONTHS(TRUNC(SYSDATE),0)-135 );
INSERT INTO TRKTRIP VALUES( 2, 10002, 'SYF777', ADD_MONTHS(TRUNC(SYSDATE),0)-135 );
INSERT INTO TRKTRIP VALUES( 3, 10001, 'KKK007', ADD_MONTHS(TRUNC(SYSDATE),0)-133 );
INSERT INTO TRKTRIP VALUES( 4, 10003, 'PKR768', ADD_MONTHS(TRUNC(SYSDATE),0)-130 );
INSERT INTO TRKTRIP VALUES( 5, 20002, 'PKR768', ADD_MONTHS(TRUNC(SYSDATE),0)-130 );
INSERT INTO TRKTRIP VALUES( 6, 30005, 'SYF777', ADD_MONTHS(TRUNC(SYSDATE),0)-124 );
INSERT INTO TRKTRIP VALUES( 7, 20005, 'KKK007', ADD_MONTHS(TRUNC(SYSDATE),0)-123 );
INSERT INTO TRKTRIP VALUES( 8, 10001, 'PKR768', ADD_MONTHS(TRUNC(SYSDATE),0)-123 );
INSERT INTO TRKTRIP VALUES( 9, 10002, 'QRT834', ADD_MONTHS(TRUNC(SYSDATE),0)-123 );
INSERT INTO TRKTRIP VALUES(10, 30005, 'KKK007', ADD_MONTHS(TRUNC(SYSDATE),0)-122 );
INSERT INTO TRKTRIP VALUES(11, 10003, 'SST005', ADD_MONTHS(TRUNC(SYSDATE),0)-122 );
INSERT INTO TRKTRIP VALUES(12, 10002, 'PKR768', ADD_MONTHS(TRUNC(SYSDATE),0)-122 );
INSERT INTO TRKTRIP VALUES(13, 20002, 'QRT834', ADD_MONTHS(TRUNC(SYSDATE),0)-120 );
INSERT INTO TRKTRIP VALUES(14, 20002, 'PKR008', ADD_MONTHS(TRUNC(SYSDATE),0)-119 );

* 我的插入代碼不完整,我只復制了一部分,直到14條記錄,但足以解決此問題。 *

我的SQL代碼的問題是

如果我做以下

從trktripleg腿中選擇DISTINCT leg.destination,其中leg.T#IN為腿(從trktrip行程WHERE L#='10001'或L#='10002'中選擇T#);

沒有leg.depature,它會顯示正確的答案,但是如果我添加leg.depature,它將為答案創建另一列。

手段

destination ----- depature

但我想將這2個答案一起加入並成為1,這將滿足以下要求

查找兩個執照號為(L#)10001和10002的駕駛員至少訪問過一次的所有城市(出發地或目的地)的名稱。

我的輸出:

SQL>從trktripleg腿中選擇DISTINCT leg.destination,leg.departure,其中leg .T#IN(從trktrip行中選擇T#WHERE L#='10001'或L#='10002');

DESTINATION                    DEPARTURE
------------------------------ ------------------------------
Sydney                         Adelaide
Sydney                         Melbourne
Perth                          Hobart
Adelaide                       Sydney
Perth                          Sydney
Perth                          Melbourne
Brisbane                       Newcastle
Newcastle                      Sydney
Adelaide                       Perth
Adelaide                       Melbourne
Brisbane                       Sydney

DESTINATION                    DEPARTURE
------------------------------ ------------------------------
Perth                          Adelaide
Wollongong                     Adelaide
Hobart                         Melbourne
Sydney                         Perth
Sydney                         Brisbane
Melbourne                      Perth
Rockhampton                    Brisbane
Melbourne                      Sydney
Sydney                         Wollongong

20 rows selected.

如果我只是按目的地找到,那將是

SQL> select DISTINCT leg.destination from trktripleg leg where leg.T# IN (select
 T# from trktrip trip WHERE L#='10001' OR L#='10002');

DESTINATION
------------------------------
Sydney
Adelaide
Brisbane
Newcastle
Perth
Melbourne
Hobart
Rockhampton
Wollongong

9 rows selected.

但問題是我需要合並目的地結果與出發時間。 當我同時選擇兩者時,它也不再與眾不同。

感謝您的所有幫助。

select DISTINCT leg.destination city from trktripleg leg where leg.T# IN (select T# from trktrip trip WHERE L#='10001' OR L#='10002')
UNION
select DISTINCT leg.departure city from trktripleg leg where leg.T# IN (select T# from trktrip trip WHERE L#='10001' OR L#='10002')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM