0

我有一个查询,显示每个修订的修订列表和员工..

现在我试图显示给定的员工是否已经在答案表中有一行..

这是数据库的概述

在此处输入图像描述

这是我的工作查询,显示修订和员工列表

SELECT l.id, l.naam, r.id as revision_id, r.beschrijving, e.id as employee_id, e.voornaam, e.achternaam,
FROM lists l
INNER JOIN revisions r ON l.id = r.list_id
INNER JOIN employeelists el ON el.list_id= l.id
INNER JOIN employees e ON e.id = el.employee_id
INNER JOIN customers c ON c.id = e.customer_id
WHERE customer_id = :id AND r.actief = 1

在此处输入图像描述

现在我已经尝试了几件事来查看员工是否已经在答案表中有记录..但它一直都失败了..

尝试 1:添加带有左外连接的 Answers 表

SELECT l.id, l.naam, r.id as revision_id, r.beschrijving, e.id as employee_id, e.voornaam, e.achternaam,
**CASE WHEN a.coach_id != 0 THEN 1 ELSE 0 END as FILLED IN**
FROM lists l"""
INNER JOIN revisions r ON l.id = r.list_id
**LEFT OUTER JOIN answers a ON a.revision_id = r.id**
INNER JOIN employeelists el ON el.list_id= l.id
INNER JOIN employees e ON e.id = el.employee_id
INNER JOIN customers c ON c.id = e.customer_id
WHERE customer_id = :id AND r.actief = 1

现在的问题是每个员工都被多次展示...... 在此处输入图像描述

这是工作数据库的 SQLFiddle,我唯一不能做的是检查给定的员工( werknemer )是否存在于答案( antwoorden )表中。

http://sqlfiddle.com/#!2/0c01c/4

关于我如何解决这个问题的任何想法?我尝试了一个子查询,但这也没有成功。谢谢!

现在查询的问题

我以为我是对的,但还有一个错误。在答案表中,它显示了werknemer_id (employee_id) = 78的结果。对于修订(修订)1和2

虽然只有修订版 1 的结果(下面的屏幕截图)

在此处输入图像描述

在此处输入图像描述

谢谢!

4

2 回答 2

0

这个存在列怎么样,如果不存在,则为 0,antwoorden如果存在,则为 1

    SELECT l.id, l.naam, r.revisie as revisie, r.id as revisie_id, r.beschrijving, w.id as werknemer, w.voornaam, w.achternaam
    , a.werknemer_id,
(CASE WHEN a.werknemer_id IS NULL THEN 0 ELSE 1 END ) AS `exist`
    FROM lijsten l
    INNER JOIN revisies r ON l.id = r.lijst_id
    INNER JOIN werknemerlijsten wl ON wl.lijst_id = l.id
    INNER JOIN werknemers w ON w.id = wl.werknemer_id
    INNER JOIN klanten k ON k.id = w.klant_id
    LEFT JOIN   antwoorden a ON w.id = a.werknemer_id
    WHERE klant_id = 39 AND r.actief = 1
    GROUP BY  r.beschrijving, w.id

小提琴

于 2013-10-21T15:21:18.290 回答
0

最终解决方案

这是最终结果,如果所需的教练(在这种情况下为 1)在答案表中,则仅看到 'ingevuld' 为 1。

SELECT l.id, l.naam, r.revisie AS revisie, r.id AS revisie_id, r.beschrijving, w.id AS werknemer, w.voornaam, w.achternaam, a.coach_id,
CASE WHEN a.coach_id = 1 THEN 1 ELSE 0 END AS ingevuld
FROM lijsten l
INNER JOIN revisies r ON l.id = r.lijst_id
INNER JOIN werknemerlijsten wl ON wl.lijst_id = l.id
INNER JOIN werknemers w ON w.id = wl.werknemer_id
INNER JOIN klanten k ON k.id = w.klant_id
LEFT JOIN antwoorden a ON w.id = a.werknemer_id AND r.id=a.revisie_id
WHERE klant_id = 39 AND r.actief = 1
group by r.id, w.id, a.coach_id
于 2013-10-21T20:41:51.233 回答