我对sql还比较陌生,尝试过很多次搜索,但都不能完成我想要的。
我的自定义字段值包含在一个表和列中,每个自定义字段都有自己的id,但存储的值在一列中。
我试图为每个自定义字段获取一列及其关联值,以下是我的查询:
SELECT PRODUCT.id AS ProductId, PRODUCT.num AS ProductNumber,
CASE WHEN customvarcharlong.customfieldid = '6' THEN customvarcharlong.info
END AS OEM1Name,
CASE WHEN customvarcharlong.customfieldid = '7' THEN customvarcharlong.info
END AS OEM1NumbersA
FROM product
JOIN customvarcharlong ON product.id=customvarcharlong.recordid
JOIN customfield ON customvarcharlong.customfieldid=customfield.id
WHERE PRODUCT.activeFlag = TRUE
ORDER BY PRODUCT.id
我的问题是,对于每个具有值的自定义字段,我都会得到一行,而case语句只会为每个与customfieldid不匹配的字段返回null。
2 00007 NULL NULL
2 00007 NULL NULL
2 00007 NULL NULL
2 00007 NULL NULL
2 00007 NULL NULL
2 00007 Comp1 NULL
2 00007 NULL 1234
2 00007 NULL NULL
2 00007 NULL NULL
以下是我想要的结果:
2 00007 Comp1 1234
使用where或groupby可以消除一些数据,因为它们位于不同的行上。这可能吗?我有48个自定义字段添加,所以你可以想象得到得到它的权利将节省大量的工作。
谢谢!
编辑以从customvarcharlong添加示例数据:
+--------+---------------+-------+----------+
| id | customFieldId | info | recordId |
+--------+---------------+-------+----------+
| 170887 | 171 | N | 1481 |
| 170888 | 172 | 3.03 | 1481 |
| 170889 | 173 | new | 1481 |
| 170890 | 170 | 0 | 1481 |
| 170891 | 5 | 0 | 1481 |
| 170892 | 6 | OEM1 | 1481 |
| 170893 | 7 | Num1 | 1481 |
| 170894 | 200 | 4184 | 1481 |
| 170895 | 120 | Truck | 1481 |
+--------+---------------+-------+----------+
正如您可能知道的,问题是recordid会重复存在的自定义字段值,而customfieldid会在每个recordid上重复。我想为每一个recordid(recordid=productid)获取它自己列中每一行的info值。
1条答案
按热度按时间q7solyqu1#
您正在使用eav数据模型。实际上,您需要一个单独的左连接到values表(
customvarcharlong
)对于每个属性(customfieldid
)要返回给定的一组实体(product
).这样试试: