GVKun编程网logo

SQL选择-如果另一个表中存在值,则计算列(sql在一个表中查找另一个表中的内容)

14

在本文中,我们将给您介绍关于SQL选择-如果另一个表中存在值,则计算列的详细内容,并且为您解答sql在一个表中查找另一个表中的内容的相关问题,此外,我们还将为您提供关于MySQL从一个表中选择所有列,

在本文中,我们将给您介绍关于SQL选择-如果另一个表中存在值,则计算列的详细内容,并且为您解答sql在一个表中查找另一个表中的内容的相关问题,此外,我们还将为您提供关于MySQL 从一个表中选择所有列,从另一个表中选择一些列、MySQL-如果column为null,则从另一个表中检索值、MySQL查询 存在一个表而不在另一个表中的数据、MYSQL查询~ 存在一个表而不在另一个表中的数据的知识。

本文目录一览:

SQL选择-如果另一个表中存在值,则计算列(sql在一个表中查找另一个表中的内容)

SQL选择-如果另一个表中存在值,则计算列(sql在一个表中查找另一个表中的内容)

尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。

我有四个表:

ORDERS[ID][DATE]ORDER_DETAILS[ID][ITEM_NO][QTY]ITEMS[ITEM_NO][DESC]KITS[KIT_NO][ITEM_NO]

回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。

我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC

没问题。一些简单的内部联接,我在路上。

困难在于在select语句中添加一列,IS_KIT如果满足以下条件,则为true

EXISTS(SELECT null FROM KITS WHERE KITS.ITEM_NO = ORDER_DETAILS.ITEM_NO)

(如果kits表包含该项目,请标记此行)

有什么方法可以计算该列?

答案1

小编典典

有不同的方法可以做到这一点。

最简单的可能是带有CASE计算列的LEFT JOIN:

SELECT  o.date,  od.item_no,  i.desc,  CASE WHEN k.item_no IS NULL THEN 0 ELSE 1 END AS is_kitFROM      orders        oJOIN      order_details od ON od.id=o.idJOIN      items         i  ON i.item_no = od.item_noLEFT JOIN kits          k  ON k.item_no = od.item_no

但是您也可以使用SUBSELECT:

SELECT  o.date,  od.item_no,  i.desc,  (SELECT COUNT(*) FROM kits k WHERE k.item_no = od.item_no) AS is_kitFROM orders        oJOIN order_details od ON od.id=o.idJOIN items         i  ON i.item_no = od.item_no

MySQL 从一个表中选择所有列,从另一个表中选择一些列

MySQL 从一个表中选择所有列,从另一个表中选择一些列

如何使用 JOIN 从一个表中选择所有列并从另一个表中选择一些列?在 MySQL 中。

答案1

小编典典

只需使用表名:

SELECT myTable.*, otherTable.foo, otherTable.bar...

这将选择所有列 frommyTable和 columnsfoobarfrom otherTable

MySQL-如果column为null,则从另一个表中检索值

MySQL-如果column为null,则从另一个表中检索值

假设我有一个表设置,其中包含一些值,包括名称,ID和引用另一个表的ID的外键。名称可以为空。当我从该表中选择所有记录时,如果名称不为null,我想获取名称。如果是这样,我想获取外键引用的记录的名称。我可以根据需要修改数据库结构,也可以简单地更改查询。我有什么选择?

答案1

小编典典

使用IFNULLCOALESCE

SELECT T1.ID, IFNULL(T1.name, T2.name) AS nameFROM firsttable T1LEFT JOIN secondtable T2ON T1.T2_id = T2.id

MySQL查询 存在一个表而不在另一个表中的数据

MySQL查询 存在一个表而不在另一个表中的数据

A、B两表,找出id字段中,存在A表,但是不存在B表的数据。

示例:a表                                   b表

                           

 

方法1: 使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~

SELECT DISTINCT a.id FROM  a WHERE a.ID NOT IN (SELECT id FROM b)

方法二 : 使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录  ~执行时间:0.739秒~

select A.ID from A left join B on A.ID=B.ID where B.ID is null

方法三 : 逻辑相对复杂,但是速度最快  ~执行时间: 0.570秒~

SELECT * FROM  a 
WHERE (SELECT COUNT(1) FROM b WHERE A.ID = B.ID) = 0;

对于效率我没有测试,这是前人的测试结果,而且原博客最后一种方法写错了

下面解释一下第三种做法:

按顺序来 首先SELECT * FROM  a  , 如果没有where的话就是查询所有。

现在有where 就缩小范围了,你可以这样理解,他按顺序遍历自己的值,当前值只有where后的表达式等于true时才会取出来。(‘’‘仅是为了方便理解,真实可能并不这样’)。

然后看子查询,子查询count(1) 只有在后面条件 a.id=b.id 时才count 的值才加一。本表没重复数据也就是说  a.id=b.id 时,count(1) =1。

等于1 的时候 WHERE (SELECT COUNT(1) FROM b WHERE A.ID = B.ID) = 0; 就是false。 所以从a中按顺序取值时只要在b中存在的,这个表达式都是false, 所以就在a中取不出来了。

除了a,b中id相等。剩下所有情况count(1)都为0 , WHERE (SELECT COUNT(1) FROM b WHERE A.ID = B.ID) = 0; 就为true. 对a 中的取值就没限制。

你看我count 一个b表中不存在的数据就返回0

 

参考 :http://blog.csdn.net/windren06/article/details/8188136

 

MYSQL查询~ 存在一个表而不在另一个表中的数据

MYSQL查询~ 存在一个表而不在另一个表中的数据

A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。

方法一

  使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~

1 select distinct A.ID from  A where A.ID not in (select ID from B)

方法二

  使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录  ~执行时间:0.739秒~

1 select A.ID from A left join B on A.ID=B.ID where B.ID is null
A left join B on A.ID=B.ID //只有left join再加上on关联,才是left join

 

  

图解

方法三

  逻辑相对复杂,但是速度最快  ~执行时间: 0.570秒~

1  select * from  B 
2     where (select count(1) as num from A where A.ID = B.ID) =0

我们今天的关于SQL选择-如果另一个表中存在值,则计算列sql在一个表中查找另一个表中的内容的分享已经告一段落,感谢您的关注,如果您想了解更多关于MySQL 从一个表中选择所有列,从另一个表中选择一些列、MySQL-如果column为null,则从另一个表中检索值、MySQL查询 存在一个表而不在另一个表中的数据、MYSQL查询~ 存在一个表而不在另一个表中的数据的相关信息,请在本站查询。

本文标签: