社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL将两个独立的复杂查询中的列合并为一行

David Eno • 5 年前 • 1522 次点击  

我在一个网站上工作,那里有许多不同的服装系列。生产线是指具有相同设计、风格、制造商等的服装。在一条生产线中,服装有不同的尺寸和颜色。

要在一个特定的行中组合所有可用颜色的图表,下面的查询工作得很好(我在Coldfusion中工作,但是PHP将使用相同的查询)。

SELECT 
skuColourwayID,cHex,cLongName,skuID, cwColID1
from garment_sku
join garment_colourways
on cwID=skuColourwayID
join garment_colour_name
on cID=cwColID1
where skuLineID= <cfqueryPARAM value = "#url.lnID#" CFSQLType = "CF_SQL_INTEGER">
group by skuColourwayID

为了积累我需要的所有信息,我必须使用连接访问三个表。(对于如何将数据呈现给我,我没有任何选择)。该行由lnID标识,在上述情况下,lnID以url变量开头。从sku表(garment_sku)开始,我访问colorways表(garment_colorways)并获取colorway颜色id(cwColID1)。通过将此应用于颜色名称表(garmentúu colourúu name),我可以得到颜色的实际名称及其十六进制值。

这一切都很好,只有几件衣服是双色的(衣袖和衣领等颜色不同)。服装库存表中有第二列cwColID2,表示第二种颜色。

解决这个问题的一种方法是执行两个单独的查询,在第二个查询中,cwColID1被cwColID2替换。然后,我可以结合查询编程,以实现双色在需要的地方。但是,这看起来很不优雅,我敢肯定MySQL在一个查询中就可以处理这个问题了?

我不想说,但表中也有第三种颜色cwColID3的规定,尽管我从来没有遇到过任何三种颜色的服装,我很高兴只为这两种颜色解决这个问题。

谢谢你的帮助。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50171
 
1522 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Nick
Reply   •   1 楼
Nick    5 年前

你只需要 JOIN garment_colour_name 表二次得到第二种颜色的名称。请注意,并非所有衣服都有两种颜色,因此您需要使用 LEFT JOIN 而不是 INNER JOIN :

SELECT 
    skuColourwayID,
    gc1.cHex AS c1Hex, 
    gc1.cLongName AS c1Name,
    gc2.cHex AS c2Hex,
    gc2.cLongName AS c2Name,
    skuID, 
    cwColID1,
    cwColID2
from garment_sku
join garment_colourways
on cwID=skuColourwayID
join garment_colour_name gc1
on gc1.cID=cwColID1
left join garment_colour_name gc2
on gc2.cID=cwColID2
where skuLineID= <cfqueryPARAM value = "#url.lnID#" CFSQLType = "CF_SQL_INTEGER">
group by skuColourwayID