如果有人能帮我,我会很高兴的:我有一个MYSQL表:
-- ----------------------------
-- Table structure for `massimp`
-- ----------------------------
DROP TABLE IF EXISTS `massimp`;
CREATE TABLE `massimp` (
`recid` int(11) NOT NULL AUTO_INCREMENT,
`Artikelnummer` varchar(100) DEFAULT NULL,
`Lieferant` varchar(100) DEFAULT NULL,
`SafetyFilename` varchar(2000) DEFAULT NULL,
`SpecFilename` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`recid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of massimp
-- ----------------------------
INSERT INTO `massimp` VALUES ('1', 'T1503', 'SIGMA-ALDRICH', 'H:\\USERDATA\\MSDS-DEMO\\Sigma-Aldrich\\MSDS\\T1503_PrintMSDSAction.pdf', '');
INSERT INTO `massimp` VALUES ('2', '101614', 'MERCK', '', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\SPEC\\101614_494-Vitamin B12-111988.pdf');
INSERT INTO `massimp` VALUES ('3', '101116', 'MERCK', '', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\SPEC\\101116_AT_DE_0002_Food_and_Beverage_Campaign_Adulerants_Non-native_Amino_Acids_In_Milk_MM.pdf');
INSERT INTO `massimp` VALUES ('4', '101614', 'MERCK', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\MSDS\\101614_SDS_AT_DE.PDF', '');
INSERT INTO `massimp` VALUES ('5', '101116', 'MERCK', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\MSDS\\101116_SDS_AT_DE.PDF', '');
当我执行这样的查询时:
SELECT a.safetyfilename, b.specfilename, a.Artikelnummer,a.Lieferant from massimp a
join massimp b on a.Artikelnummer=b.Artikelnummer and a.Lieferant= b.Lieferant;
我得到了这个输出,这不是我想要的结果:
我想要一张桌子
如果Artikelnummer的safetyfilename和specfilename是可用的,则应该打印他的行--只有这一行用于规范Artikelnummer.
。
有人能告诉我如何在MySQL查询中完成这个复杂的操作吗?
谢谢
发布于 2021-02-27 17:06:54
这应该能做你想做的。
SELECT
CASE
WHEN b.specfilename != '' THEN b.specfilename
ELSE a.safetyfilename
END AS filename,
a.Artikelnummer,
a.Lieferant
FROM massimp a
JOIN massimp b ON
a.Artikelnummer=b.Artikelnummer AND
b.Lieferant= b.Lieferant
WHERE (a.SafetyFilename != '' OR b.SpecFilename != '');
发布于 2021-02-27 22:45:31
谢谢马克B,有了你的主意我才能做到:
SELECT
a.SafetyFilename,
b.SpecFilename,
a.Artikelnummer,
a.Lieferant
FROM massimp a
JOIN massimp b ON
a.Artikelnummer=b.Artikelnummer AND
b.Lieferant= b.Lieferant
WHERE (a.SafetyFilename != '' and b.SpecFilename != '')
union
Select
a.SafetyFilename,
b.SpecFilename,
a.Artikelnummer,
a.Lieferant
FROM massimp a
JOIN massimp b ON
a.Artikelnummer=b.Artikelnummer AND
b.Lieferant= b.Lieferant
WHERE (a.SafetyFilename = '' and b.SpecFilename != '')
union
Select
a.SafetyFilename,
b.SpecFilename,
a.Artikelnummer,
a.Lieferant
FROM massimp a
JOIN massimp b ON
a.Artikelnummer=b.Artikelnummer AND
b.Lieferant= b.Lieferant
WHERE (a.SafetyFilename != '' and b.SpecFilename = '')
;
https://stackoverflow.com/questions/66400925
复制相似问题