我想在使用MYSQL的查询中使用一些逻辑

时间:2012-05-28 12:36:34

标签: mysql database

我有两个表,第一个叫做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 table

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()
  

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

enter image description here

更新

  

说明?

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

3 个答案:

答案 0 :(得分:0)

选择 t。id,t。name,IFNULL(cpd.status,0)AS resultStatus,IFNULL(cpd.added_date,CURDATE())AS added_date 来自teams t LEFT JOIN cpd ON cpd.team_id = t.id. 在哪里。sub_cat_id = 19或者cpd.added_date = CURDATE() GROUP BY t.id

答案 1 :(得分: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()

答案 2 :(得分:0)

你的JOIN ON cpd.team_id = t.id只匹配一个元组与cpd表,所以其他元组的日期设置为NULL(因为你正在进行LEFT JOIN),因此where查询只给出一个元组