0

我有两个表,第一个被调用teams,第二个被调用cpd,我想要这个结果(见下面的结果屏幕)。我自己试过但没有成功(见下面的练习查询)。

团队表

id    name               sub_cat_id
1     SACRAMENTO KINGS   19
2     KINGS              19
3     MIMAMI HEAT        19
4     HEAT               20
5     KITE               20

cpd表

id team_id status added_date
1  3       1      2012-05-26
2  3       1      2012-05-27
3  3       0      2012-05-28

练习查询

SELECT 
t.`id`,t.`name`,IFNULL(cpd.status,0) AS resultStatus,IFNULL(cpd.added_date,CURDATE()) AS added_date
FROM `teams` t
LEFT JOIN cpd  ON cpd.team_id = t.id 
WHERE t.`sub_cat_id` = 19 OR cpd.added_date = CURDATE()

结果屏幕(仅需要那些行在屏幕中为黑色)

在此处输入图像描述

更新

解释 ?

  1. 我正在尝试sub_cat_id = 19在团队表中获取与他们相关的那些行
  2. 加入team table_ cpd table_cpd.status filed
  3. cpd.status必须与当前日期cpd table相关2012-05-28
4

3 回答 3

0

选择吨。id,t。name,IFNULL(cpd.status,0) AS resultStatus,IFNULL(cpd.added_date,CURDATE()) AS added_date FROM teamst LEFT JOIN cpd ON cpd.team_id = t.id WHERE t. sub_cat_id= 19 或 cpd.added_date = CURDATE() GROUP BY t.id

于 2012-05-28T12:46:06.997 回答
0

获得所需结果的方法不止一种:

例如:

SELECT t.`id`,t.`name`,
       IFNULL(cpd.status,0) AS resultStatus,
       IFNULL(cpd.added_date,CURDATE()) AS added_date
FROM `teams` t
INNER JOIN cpd  ON (cpd.team_id = t.id AND cpd.status = 0) 
WHERE t.`sub_cat_id` = 19 
      OR 
      cpd.added_date = CURDATE()
于 2012-05-28T12:46:43.330 回答
0

您的 JOINON cpd.team_id = t.id仅将一个元组与 cpd 表匹配,因此对于其他元组,日期设置为 NULL(因为您正在执行 LEFT JOIN),因此 where 查询仅提供一个元组

于 2012-05-28T12:47:08.220 回答