日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

SQL LEFT JOIN与IN使用案例说明

發(fā)布時(shí)間:2024/9/27 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL LEFT JOIN与IN使用案例说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述

? 為什么第一個(gè)query不正確? 求sales person: query 1: select?SalesPerson.name from Orders inner join Company on Company.com_id = Orders.com_id inner join SalesPerson on SalesPerson.sales_id = Orders.sales_id where Company.name<>'RED';query 2: select name from salesperson where sales_id not in (select orders.sales_id from orders inner join company on company.com_id=orders.com_id where company.name='RED')注:原需求是輸出salesperson表中沒有向公司RED 銷售任何東西的銷售員?

數(shù)據(jù)補(bǔ)充

--- 有如下表、結(jié)構(gòu)及數(shù)據(jù),計(jì)用SQL編寫出 -- 輸出salesperson表中沒有向公司RED 銷售任何東西的銷售員DROP TABLE IF EXISTS `company`; CREATE TABLE `company` (`com_id` int(11) NULL DEFAULT NULL,`NAME` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`city` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4;INSERT INTO `company` VALUES (1, 'RED', 'Boston'); INSERT INTO `company` VALUES (2, 'ORANGE', 'New York'); INSERT INTO `company` VALUES (3, 'YELLOW', 'Boston'); INSERT INTO `company` VALUES (4, 'GREEN', 'Austin');DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` (`order_id` int(11) NULL DEFAULT NULL,`order_date` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`com_id` int(11) NULL DEFAULT NULL,`sales_id` int(11) NULL DEFAULT NULL,`amount` int(11) NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4;INSERT INTO `orders` VALUES (1, '1/1/2014', 3, 4, 100000); INSERT INTO `orders` VALUES (2, '2/1/2014', 4, 5, 5000); INSERT INTO `orders` VALUES (3, '3/1/2014', 1, 1, 50000); INSERT INTO `orders` VALUES (4, '4/1/2014', 1, 4, 25000);CREATE TABLE `salesperson` (`sales_id` int(11) NULL DEFAULT NULL,`NAME` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`salary` int(11) NULL DEFAULT NULL,`commission_rate` int(11) NULL DEFAULT NULL,`hire_date` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4;INSERT INTO `salesperson` VALUES (1, ' John ', 100000, 6, ' 4/1/2006'); INSERT INTO `salesperson` VALUES (2, ' Amy ', 120000, 5, ' 5/1/2010 '); INSERT INTO `salesperson` VALUES (3, ' Mark ', 65000, 12, ' 12/25/2008'); INSERT INTO `salesperson` VALUES (4, ' Pam ', 25000, 25, ' 1/1/2005 '); INSERT INTO `salesperson` VALUES (5, ' Alex ', 50000, 10, ' 2/3/2007 ');

解決方法

#2 解決方法: -- way1用LEFT JOIN結(jié)合IFNULL。 -- 解釋1 這里要取得銷售人員名在salesperson,所以它是主表。 -- 解釋2 通過LEFT JOIN WHERE IS NULL達(dá)到NOT IN的效果。SELECT A.name,D.sales_id FROM salesperson as A LEFT JOIN (SELECT C.sales_id FROM orders as CJOIN company as BON B.com_id = C.com_idWHERE B.name= "RED") D ON A.sales_id = D.sales_id WHERE D.sales_id IS NULL -- way2 用NOT IN select name from salesperson where sales_id not in (select orders.sales_id from orders inner join company on company.com_id=orders.com_id where company.name='RED')

問題分析

-- Query1的解釋: /* Query1 用的是INNER JOIN結(jié)果不對 1 首先記錄上不對,LEFT JOIN和INNER JOIN的結(jié)果不同 2 像 Pam既銷售給了“RED”又銷售給了“YELLOW”但I(xiàn)NNER JOIN的where company.name<>'RED'又給“找回來”了是不對的。 */

總結(jié)

以上是生活随笔為你收集整理的SQL LEFT JOIN与IN使用案例说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。