【问题标题】:mysql select from T1 if not in T2 else replacemysql select from T1 if not in T2 else replace
【发布时间】:2016-06-28 19:53:54
【问题描述】:

所以我正在尝试编写的 mysql PDO 查询必须比较两个表中的列和输出数组。

  1. 如果表1的输出数据为空
  2. 如果单元格的值与表 2 相同, 首先输出该值,然后输出所有其他值。

工作表:

table1
|jobName|Name|
|job1   |John|
|job2   |John|
|job3   |John|
|jobABC |Jack|
|jobCCC |Jack|
|jobXYZ |Jack|

和日表:

table2
|day |jobName|Name|
|day1|       |John|
|day1|jobCCC |Jack|
|day2|job2   |John|
|day2|       |Jack|
|day3|jobXYZ |Jack|
|day3|job1   |John|

John 的输出应该是:

day1, job1, job2, job3
day2, job2, job1, job3
day3, job1, job2, job3

杰克的输出应该是:

day1, jobCCC, jobABC, jobXYZ
day2, jobABC, jobCCC, jobXYZ
day3, jobXYZ, jobABC, jobCCC

谢谢!

【问题讨论】:

  • 我不太明白工作和天数如何与您的示例输出相匹配。由于日程表上没有工作名称,John 的 day1 不应该什么都没有吗?工作/天数之间的联系是什么,或者是逐行比较
  • @Matt 如果在指定的那一天没有工作,则输出是 John 分配到的所有工作的列表。我将在下拉列表中输出结果。然后约翰指定他在第 1 天所做的工作,并在第 1 天添加到表 2。在下一页上,刷新下拉列表更新为将 job3 作为下拉列表中的第一个,所有其他 job1、job2 紧随其后。

标签: php mysql sql


【解决方案1】:

我接近了...有人愿意帮助我吗?

http://sqlfiddle.com/#!9/e5a510/12

SELECT 
  b.Day,
  COALESCE(a.Name, b.Name) AS Name, 
  COALESCE(a.JobName, b.JobName) AS JobName
FROM table1 a, table2 b
WHERE a.Name = b.Name

更新!

这是最终产品(我认为):

http://sqlfiddle.com/#!9/e5a510/53

SELECT 
  b.Day,
  COALESCE(a.Name, b.Name) AS Name, 
  COALESCE(a.JobName, b.JobName) AS JobName
FROM table1 a, table2 b
WHERE a.Name = b.Name AND a.Name = 'Jack' 
ORDER BY   b.Day ASC, a.JobName = b.JobName DESC, a.JobName ASC

【讨论】:

  • 哇,谢谢@ThePloki 我想我是通过添加订单得到的:sqlfiddle.com/#!9/e5a510/52 现在,如何仅获得 Jack 的结果?
  • 在 WHERE a.Name = b.Name 添加 AND a.Name = 'Jack' .... 所以它会显示为 .... WHERE a.Name = b.Name AND a.Name =“杰克”
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2022-11-12
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多