首页 > 解决方案 > mysql join 每日和每周数据

问题描述

我尝试从两个表中选择数据并将其与 update_date 一起作为连接元素。我的问题:一张表有每日数据,另一张表有每周数据。如果我使用 LEFT JOIN,它会正确显示两个表中的数据 - 但只显示每周的数据。我想显示所有每日数据以及相应日期的每周数据。到目前为止,这是我的代码:

$query =   "SELECT * FROM `table1` 
            LEFT JOIN `table2`
            ON `table1`.`update_date` = `table2`.`update_date`
            WHERE `table1`.`market_id` = '10'
            AND `table1`.`act_contract` = 'act'
            AND `table2`.`market_id` = '10'
            ";

下图显示了从两个表中选择的内容,以使我的问题更容易理解。我想从两个表中选择所有条目,由 update_date 连接。如果我没有来自表 2 的结果,则查询应该显示来自 table1 的 update_date 和 sett 的条目,并且还将 comshort 显示为 NULL。

这是我创建的表:

CREATE TABLE `table1` (
  `price_ID` int(11) NOT NULL,
  `update_date` varchar(45) DEFAULT NULL,
  `contract_id` varchar(45) DEFAULT NULL,
  `market_id` varchar(45) DEFAULT NULL,
  `open` varchar(45) DEFAULT NULL,
  `high` varchar(45) DEFAULT NULL,
  `low` varchar(45) DEFAULT NULL,
  `close` varchar(45) DEFAULT NULL,
  `sett` varchar(45) DEFAULT NULL,
  `est_volume` int(11) DEFAULT NULL,
  `prior_volume` varchar(45) DEFAULT NULL,
  `prior_open_int` varchar(45) DEFAULT NULL,
  `act_contract` varchar(45) DEFAULT NULL
ALTER TABLE `table1`
  ADD PRIMARY KEY (`price_ID`);

第二个:

CREATE TABLE `table2` (
  `ID` int(11) NOT NULL,
  `comlong` int(11) DEFAULT NULL,
  `comshort` int(11) DEFAULT NULL,
  `update_date` date DEFAULT NULL,
  `market_id` int(11) DEFAULT NULL,
  `openinterest` int(11) DEFAULT NULL
ALTER TABLE `cot-data`
  ADD PRIMARY KEY (`ID`);

两张桌子

标签: mysql

解决方案


解决方案是子选择。

SELECT *,
            (select comshort from `table2` where market_id=table1.market_id and update_date=table1.update_date)
            FROM `table1` WHERE `act_contract` = 'act' AND `market_id`= '10'

推荐阅读