Database mysql复杂的多表选择查询

Database mysql复杂的多表选择查询,database,database-design,relational-database,Database,Database Design,Relational Database,餐桌访问 字段[id、患者id(fk)、医生id(fk)、标志(Xfk)、类型(Xfk)、预约时间、日期等] Xfk=它引用了其他表,但它不是必须存在的,所以我不使用约束 SELECT `v`.`date`, `v`.`time_booked`, `v`.`stats`, `p`.`name` as pt_name, `d`.`name` as dr_name, `f`.`name` as flag_name, `f`.`color` as flag_color, `vt`.`name`

餐桌访问

字段[id、患者id(fk)、医生id(fk)、标志(Xfk)、类型(Xfk)、预约时间、日期等]

Xfk=它引用了其他表,但它不是必须存在的,所以我不使用约束

SELECT `v`.`date`, `v`.`time_booked`, `v`.`stats`, `p`.`name` as pt_name, 
 `d`.`name` as dr_name, `f`.`name` as flag_name, `f`.`color` as flag_color,
 `vt`.`name` as type, `vt`.`color` as type_color

FROM (`visits` v, `users` p, `users` d, `flags` f, `visit_types` vt)

WHERE `p`.`id`=`v`.`patient_id` 
AND `d`.`id`=`v`.`doctor_id` 
AND `v`.`flag`=`f`.`id` 
AND `v`.`type`=`vt`.`id`
AND `v`.`date` >= '2013-02-27'
AND (v.date <= DATE_ADD('2013-02-27', INTERVAL 7 DAY))
AND (`v`.`doctor_id`='00002' OR `v`.`doctor_id`='00001')
ORDER BY `v`.`date` ASC, `v`.`time_booked` ASC;
选择'v`.'date`、'v`.'time\u booked`、'v`.'stats`、'p`.'name`作为pt\u name,
`d`.`name`作为dr_name,`f`.`name`作为flag_name,`f`.`color`作为flag_color,
`vt`.`name`作为类型,`vt`.`color`作为类型\颜色
FROM(`visions`v、`users`p、`users`d、`flags`f、`visit_`vt)
其中'p`.'id`='v`.'patient\u id`
和'd`.'id`='v`.'doctor\u id`
和'v`.'flag`='f`.'id`
和'v`.'type`='vt`.'id`
和'v`.'date`>='2013-02-27'
和(v.日期)
  • 如果它运行得很快,我不会弄糟它。我通常更喜欢使用连接,而不是where子句中的匹配内容

  • 你有没有可能去掉“字符”呢?我认为这会让你读起来有点困难

  • 请看MySQL的case语句:

  • 
    当v.type 0时选择case,然后
    f、 名字
    其他的
    '' 
    以名称结尾。。。
    
    
    select case when v.type <> 0 then 
       f.name 
    else 
       '' 
    end as name, ...