如何选择具有空值的列并使用该列的ID选择另一个表的另一列

时间:2019-06-18 10:07:18

标签: mysql join select

考虑表格要求和订单

CREATE TABLE `req` (
  `req_id` bigint(20) NOT NULL,
  `order_date` timestamp NULL DEFAULT NULL,
  `status` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `order_id` bigint(20) NOT NULL,`
  PRIMARY KEY (`req_id`),
  KEY `order_id` (`order_id`),
  CONSTRAINT `req_ibfk_16` FOREIGN KEY (`order_id`) REFERENCES `order` (`order_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;


CREATE TABLE `orders` (
  `order_id` bigint(20) NOT NULL,
  `acc_id` bigint(20) DEFAULT NULL,
  `acc_name` varchar(256) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`order_id`),
  KEY `index_name` (`order_id`,`account_id`),
  CONSTRAINT `order_ibfk_1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;

“要选择列oder_id,oder_date和status,其中status为表req的空值,并使用oder id选择订单表的acc_id和acc_name列”?

并以

共同显示

status , oder_id , acc_id, acc_name

SELECT status,order_date,order_id FROM req WHERE status is null;

但是我对如何使用ID选择另一个表列有疑问 并一起给他们看

我已将其用于从一个表中选择列

SELECT status,order_date,order_id FROM req WHERE status is null;

我希望输出下面提到的选择列

status,oder_id,acc_id,acc_name

1 个答案:

答案 0 :(得分:0)

您需要通过使用两个表之间的关系来联接两个表 根据您的表,order_id是'orders'的主键,并且是'req'

的FK

使用此代码:

SELECT 
    req.status , req.oder_id , orders.acc_id, orders.acc_name
FROM 
    req, orders
WHERE 
    req.order_id = orders.order_id
and
    req.status is null;

这基本上将两个表联接在一起,您需要编写字段来自哪个表。这是代码的长版,但它是最简单的理解方法。

如果您有任何疑问,请告诉我。

编辑: 通过不以逗号分隔的联接添加另一种方法。改为使用完全联接。

SELECT 
    req.status , req.oder_id , orders.acc_id, orders.acc_name
FROM 
    req 
Full Join
    orders
on 
    req.order_id = orders.order_id
WHERE 
    req.status is null;