我有三个mysql表。
表-01:table_item
在此表中,存储具有相应ID的所有项目。项目分为两类。一个是写作类别(catid-1),另一个是服装类别(catid-2)。
---------------------------------------------
| id | catname | catid | itemid | itemname |
---------------------------------------------
║ 1 ║ writing ║ 1 ║ 1 ║ Pen ║
║ 2 ║ writing ║ 1 ║ 2 ║ Pencil ║
║ 3 ║ writing ║ 1 ║ 3 ║ Sharpner ║
║ 4 ║clothing ║ 2 ║ 4 ║ Pant ║
║ 5 ║clothing ║ 2 ║ 5 ║ shirt ║
║ 6 ║clothing ║ 2 ║ 6 ║ coat ║
║ 7 ║clothing ║ 2 ║ 7 ║ Tie ║
---------------------------------------------
表-02:bid_item
每年都会要求出价/招标从上面的项目表(table_item)购买选择性项目。因此,在此表中,选择的项目(选择用于投标/投标)将按年存储。
----------------------
║ id ║ itemid ║ year ║
----------------------
║ 1 ║ 1 ║ 2015 ║
║ 2 ║ 2 ║ 2015 ║
║ 3 ║ 3 ║ 2015 ║
║ 4 ║ 4 ║ 2015 ║
║ 5 ║ 5 ║ 2015 ║
║ 6 ║ 6 ║ 2015 ║
║ 7 ║ 1 ║ 2016 ║
║ 8 ║ 2 ║ 2016 ║
║ 9 ║ 3 ║ 2016 ║
║ 10 ║ 4 ║ 2016 ║
║ 11 ║ 7 ║ 2016 ║
----------------------
表-03:bid_2015
在调用出价/投标后,所选项目的相应公司的费率将存储在此表中。每家公司都不会为特定年份的每个项目提供出价。表是根据year
别名创建的。此处2015年的出价率存储如下:
--------------------------------
║ id ║ itemid ║ company ║ rate ║
--------------------------------
║ 1 ║ 1 ║ X ║ 2.0 ║
║ 2 ║ 2 ║ X ║ 2.2 ║
║ 3 ║ 3 ║ X ║ 1.0 ║
║ 4 ║ 4 ║ X ║ 10.0 ║
║ 5 ║ 5 ║ X ║ 15.0 ║
║ 6 ║ 1 ║ Y ║ 1.5 ║
║ 8 ║ 2 ║ Y ║ 2.0 ║
║ 9 ║ 3 ║ Y ║ 1.5 ║
║ 10 ║ 4 ║ Y ║ 12.0 ║
║ 11 ║ 6 ║ Y ║ 20.0 ║
--------------------------------
我需要一个html表(带有输入字段),用于特定年份的数据输入/编辑(此处,2015年)。表格将包含以下内容:
1)表格将显示2015年招标/招标中clothing catagory (catid-2)
的每个项目。
2)如果公司出价,价格将在费率栏中,否则费率栏将为空白。管理员可以更改价格(如果输入错误的出价),也可以为特定表格中未输入的其他项目添加费率。
因此html表格的外观如下:
HTML Form-Table (For Data Entry/Edit) : For Company-Y and clothing catagory for the year-2015
Company: (drop-down menu- Company-Y)
------------------------------------------------------
Item Name | Rate |
----------------------
Pant | 12.0 |
-----------------------
Shirt |
-----------------------
Coat | 20.0 |
-----------------------
============
Submit
============
正如你所见,公司-Y的衬衫价格为空白,因为该公司没有给出衬衫的报价。如果该公司稍后给出衬衫的价格,可以输入费率并可以更新表格。
那么获取上面的html表格会是什么样的mysql查询? 如果我执行此查询:
SELECT i.itemname,d.rate FROM table_item as i INNER JOIN bid_item as b ON i.itemid=b.itemid LEFT JOIN bid_2015 as d ON b.itemid=d.itemid WHERE i.catid=2 AND d.company='Y' AND b.year=2015
但是预期的html表还没有到来。使用INNER和LEFT Join时,Item Name
在表格表格中不止一次显示。
输出如上所述的html表格表的有效mysql查询是什么?
答案 0 :(得分:2)
这适用于2015年Y公司的所有数据
select itemname,
rate
from table_item join bid_item on(table_item.itemid=bid_item.itemid and year=2015 and catid=2)
left join bid_2015 on( bid_2015.itemid=bid_item.itemid and
bid_item.itemid=table_item.itemid and company='Y' and year=2015 and catid=2)
答案 1 :(得分:1)
此查询可以正常工作。
SELECT i.itemname,
d.rate
FROM table_item as i
INNER JOIN bid_item as b ON i.itemid=b.itemid AND b.year=2015
LEFT JOIN bid_2015 as d ON b.itemid=d.itemid AND d.company='Y'
WHERE i.catid=2
注意:强>
当你在桌子上
LEFT/RIGHT joins
时(比如说b
) 你的例子如下)。永远不要将table 'b'
的条件放在WHERE
中 条款。它将充当INNER JOIN
。所以这段代码
SELECT i.itemname, d.rate FROM table_item as i INNER JOIN bid_item as b ON i.itemid=b.itemid LEFT JOIN bid_2015 as d ON b.itemid=d.itemid WHERE i.catid=2 AND d.company='Y' AND b.year=2015
如下所示
INNER JOIN
。SELECT i.itemname, d.rate FROM table_item as i INNER JOIN bid_item as b ON i.itemid=b.itemid INNER JOIN bid_2015 as d ON b.itemid=d.itemid WHERE i.catid=2 AND d.company='Y' AND b.year=2015
希望这有帮助。