我在mysql中有两个表。第一个表是名称具有以下日期:
name service number
carlos telephone 6
juan watter 12
maria gas 23
jhon hostal 17
marcos sleeping 21
carlos othercarlos 12
other other 13
我有其他表别名
name service alias price
carlos telephone telephone-carlos 700
carlos sleeping sleeping-carlos 300
juan watter watter-juan 900
maria gas gas-maria 650
jhon hostal hostal-jhon 700
我需要一个名字,别名,号码和王子的视图。 但是我需要名字中的所有行我想要一个左外连接。 但问题是,当我进行查询时,othercarlos我需要的价格将是卡洛斯服务的平均值,当名称是其他我需要的时候出现所有服务的平均值。但是显示为空
http://sqlfiddle.com/#!2/c1d4f/1
我创建了这个表和我的查询
答案 0 :(得分:3)
好的,我确信有更好的方法可以做到这一点,但我至少可以为您提供一种方式:
SELECT t1.name,
t1.service,
t2.alias,
t1.number,
COALESCE(t2.price,t3.price,t4.price) AS price
FROM name t1
LEFT JOIN alias t2
ON t1.name= t2.name
AND t1.service = t2.service
LEFT JOIN ( SELECT name, AVG(price) AS price
FROM alias
GROUP BY name) t3
ON t1.name = t3.name
LEFT JOIN ( SELECT AVG(price) AS price
FROM alias) t4
ON t1.name = 'other'
结果:
╔════════╦═════════════╦══════════════════╦════════╦═══════╗
║ NAME ║ SERVICE ║ ALIAS ║ NUMBER ║ PRICE ║
╠════════╬═════════════╬══════════════════╬════════╬═══════╣
║ carlos ║ telephone ║ telephone-carlos ║ 6 ║ 700 ║
║ juan ║ watter ║ watter-juan ║ 12 ║ 900 ║
║ maria ║ gas ║ gas-maria ║ 15 ║ 250 ║
║ jhon ║ hostal ║ hostal-jhon ║ 21 ║ 640 ║
║ carlos ║ sleeping ║ sleeping-carlos ║ 24 ║ 300 ║
║ carlos ║ othercarlos ║ (null) ║ 11 ║ 500 ║
║ other ║ (null) ║ (null) ║ 2 ║ 558 ║
╚════════╩═════════════╩══════════════════╩════════╩═══════╝