我需要对数据库进行查询。
表"服务器"
+----------+----------+
| ID | Name |
+----------+----------+
| 1 | Server1 |
| 2 | Server2 |
| 3 | Server3 |
| 4 | Server4 |
+----------+----------+
表"保修":
+----------+----------+----------+
| linkType | linkID | Year |
+----------+----------+----------+
| 1 | 1 | 2015 |
| 2 | 3 | 2016 |
| 2 | 4 | 2016 |
+----------+----------+----------+
servers.iD = warranty.linkID
现在我希望获得一个列表:
+----------+----------+----------+
| Warranty | ServerID | Name |
+----------+----------+----------+
| no | 1 | Server1 |
| no | 2 | Server2 |
| yes | 3 | Server3 |
| yes | 4 | Server4 |
+----------+----------+----------|
表示我需要表格中所有服务器的列表"服务器",以及Infofield"保修" (YES / NO)。
如果服务器的ID出现在表"保修"中,则应打印"是",否则:" no",但仅限于linkType = 2
我知道如何使用SELECT IF(服务器=" Y","是","不")AS"服务器?&# 34; ...查询,但我不知道如何在另一个表中存在或不存在ID。
答案 0 :(得分:0)
首先,您需要申请加入,然后检查您的条件。
答案 1 :(得分:0)
您希望在此处使用左外连接。如果保修将为空或1,则显示否则是。
答案 2 :(得分:0)
SELECT * ,
if(exists (select * from warranty t1 where t.ID=t1.linkID and linkType=2), 'yes', "no")
FROM servers t1
答案 3 :(得分:0)
您必须执行ALTER TABLE Servers ADD Warranty type_donnees
并执行
update TABLE Servers set warranty = 'yes' where (
select EXISTS(
select linkid from warranty were servers.id = linkid
));
它的想法,测试它。
答案 4 :(得分:0)
尝试这样:
SELECT (CASE
WHEN w.linkID IS NULL THEN 'No'
ELSE 'Yes'
END) AS Warranty,
s.ID as ServerID,
S.Name AS Name
FROM servers AS S
LEFT JOIN warranty AS W ON s.iD = W.linkID
WHERE W.linkType = 2
答案 5 :(得分:0)
首先,我希望您收集有关MySQL JOINS和CASE WHEN表达的一些知识。
然后尝试自己制定查询。
只有在你真的遇到困难时才能获得帮助。
<强>解释强>
如果你只是在这两个表(服务器(左表)和保修)之间进行左连接 然后查询看起来像:
查询#1:
SELECT
servers.ID,
servers.Name,
warranty.linkType,
warranty.linkID,
warranty.`year`
FROM servers
LEFT JOIN warranty
ON warranty.linkID = servers.ID
ORDER BY servers.ID ASC
你会得到以下结果:
然后从这个结果集中,如果你在linkType上应用了一些if else(即CASE WHEN) 然后查询看起来像:
查询#2:
SELECT
CASE WHEN warranty.linkType = 2 THEN "yes" ELSE "no" END AS Warranty,
servers.ID AS ServerID,
servers.Name
FROM servers
LEFT JOIN warranty
ON warranty.linkID = servers.ID
ORDER BY servers.ID ASC
最终结果如下:
N:B: 查询#2 是最终查询。
答案 6 :(得分:0)
使用CASE
表达式和JOIN
。
<强>查询强>
SELECT
CASE WHEN t1.ID IN
(SELECT linkID from warranty WHERE linkType = 2) THEN 'yes' ELSE 'no' END AS Warranty,
t1.ID, t1.Name
FROM servers t1
LEFT JOIN warranty t2
ON t1.ID = t2.linkID;
答案 7 :(得分:0)
我很想在yes / no字段中使用布尔值1/0,并将其转换为应用程序层中的文本。
我还将linkType置于LEFT JOIN条件下。
这使得查询更简单:
var $matches = $('#mydiv').find('.adiv');
将来我也会更符合您的表名。 SELECT w.linkID IS NOT NULL AS warranty
s.ID AS ServerID,
s.Name,
FROM servers s
LEFT JOIN warranty w
ON w.linkID = s.ID
AND w.linkType = 2
ORDER BY s.ID
是复数,servers
是单数。我建议选择一个约定,我们在公司使用单数表名称。