从使用ID或UUID的三个表创建结果表
我有一个数据库 mariadb 10.7,带有名称grocery
。有3张杂货店
- 。
- 杂货店。Shop
- 杂货店。Suppliers
桌子有时会使用主钥匙,有时是UUID。旧数据使用ID,新数据UUID。这不是我的决定,它是在我工作的公司中设立的。 不可能在表中添加新列。
uuid 示例:“ 123e4567-e89b-emp. 在此问题中,例如“ AB”仅使用UUID的一部分。
杂货店杂货店:
┌───────┬─────────┬──────────┬──────────┬──────────────┐
│ id_gd │ uuid_gd │ id_sh │ uuid_sh │ from_country │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 7 │ null │ null │ ab │ Brazil │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ gn │ null │ ab │ Mexico │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ gp │ 3 │ null │ Paraguay │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 9 │ null │ 3 │ null │ Ecuador │
└───────┴─────────┴──────────┴──────────┴──────────────┘
餐桌杂货店:
┌───────┬─────────┬────────────┐
│ id_sh │ uuid_sh │ item │
├───────┼─────────┼────────────┤
│ null │ ab │ pineapples │
├───────┼─────────┼────────────┤
│ 3 │ null │ bananas │
└───────┴─────────┴────────────┘
餐桌杂货
┌───────┬─────────┬──────────┬──────────┬──────────────┐
│ id_sp │ uuid_sp │ id_sh │ uuid_sh │ supp_company │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 12 │ null │ null │ ab │ company1 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ sd │ null │ ab │ company2 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ sr │ 3 │ null │ company3 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 13 │ null │ 3 │ null │ company4 │
└───────┴─────────┴──────────┴──────────┴──────────────┘
。 =========================== =
= = = = = = = =
┌──────────┬──────────┬────────────┬──────────────┬────────────────┐
│ id_sh │ uuid_sh │ item │ from_country │ supp_company │
├──────────┼──────────┼────────────┼──────────────┼────────────────┤
│ null │ ab │ pineapples │ Brazil │ company1 │
├──────────┼──────────┼────────────┼──────────────┼────────────────┤
│ 3 │ null │ bananas │ Paraguay │ company3 │
└──────────┴──────────┴────────────┴──────────────┴────────────────┘
=我基本上只是一个表grocery.shop
列从表grocery.goods
和“ supp_company”中的列grocery.suppliers
。 从表杂货店中,只需要使用菠萝和带有香蕉的第一行选择第一行。 从表
杂货店。Suppliers
是相同的,需要仅选择带有菠萝的第一行,而使用香蕉的第一行。需要从表杂货店中选择所有行。 我尝试使用此查询来创建此结果表,但是查询无法返回正确的结果。
SELECT DISTINCT shop.id_sh,
shop.uuid_sh,
shop.item,
goods.from_country,
suppliers.supp_company
FROM shop
LEFT JOIN goods
ON ((shop.id_sh IS NOT NULL AND shop.id_sh = goods.id_sh) OR
((shop.uuid_sh IS NOT NULL AND shop.uuid_sh = goods.uuid_sh))
LEFT JOIN suppliers
ON ((shop.id_sh IS NOT NULL AND suppliers.id_sh = shop.id_sh) OR
(shop.uuid_sh IS NOT NULL AND suppliers.uuid_sh = shop.uuid_sh))
是否可以创建此结果表?
I have one database mariadb 10.7 with name grocery
. There are 3 tables
- grocery.goods
- grocery.shop
- grocery.suppliers
The tables use the primary key sometimes id, sometimes uuid. Old data use id, new data uuid. It's not my decision, it's set up in the company where I work.
It is not possible to add new columns to the tables.
UUID example: "123e4567-e89b-12d3-a456-426614174000".
In this question is used only part of uuid for example "ab".
Table grocery.goods:
┌───────┬─────────┬──────────┬──────────┬──────────────┐
│ id_gd │ uuid_gd │ id_sh │ uuid_sh │ from_country │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 7 │ null │ null │ ab │ Brazil │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ gn │ null │ ab │ Mexico │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ gp │ 3 │ null │ Paraguay │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 9 │ null │ 3 │ null │ Ecuador │
└───────┴─────────┴──────────┴──────────┴──────────────┘
Table grocery.shop:
┌───────┬─────────┬────────────┐
│ id_sh │ uuid_sh │ item │
├───────┼─────────┼────────────┤
│ null │ ab │ pineapples │
├───────┼─────────┼────────────┤
│ 3 │ null │ bananas │
└───────┴─────────┴────────────┘
Table grocery.suppliers:
┌───────┬─────────┬──────────┬──────────┬──────────────┐
│ id_sp │ uuid_sp │ id_sh │ uuid_sh │ supp_company │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 12 │ null │ null │ ab │ company1 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ sd │ null │ ab │ company2 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ null │ sr │ 3 │ null │ company3 │
├───────┼─────────┼──────────┼──────────┼──────────────┤
│ 13 │ null │ 3 │ null │ company4 │
└───────┴─────────┴──────────┴──────────┴──────────────┘
================================================================
Resulting table:
┌──────────┬──────────┬────────────┬──────────────┬────────────────┐
│ id_sh │ uuid_sh │ item │ from_country │ supp_company │
├──────────┼──────────┼────────────┼──────────────┼────────────────┤
│ null │ ab │ pineapples │ Brazil │ company1 │
├──────────┼──────────┼────────────┼──────────────┼────────────────┤
│ 3 │ null │ bananas │ Paraguay │ company3 │
└──────────┴──────────┴────────────┴──────────────┴────────────────┘
It is basically just a table grocery.shop
with added columns "from_country" from table grocery.goods
and "supp_company" from table grocery.suppliers
.
From table grocery.goods
is needed choose only first row with pineapples and first row with bananas.
From table grocery.suppliers
is the same, is needed choose only first row with pineapples and first row with bananas. From table grocery.shop is needed to choose all rows.
I tried to create this resulting table with this query, but the query does not return the correct result.
SELECT DISTINCT shop.id_sh,
shop.uuid_sh,
shop.item,
goods.from_country,
suppliers.supp_company
FROM shop
LEFT JOIN goods
ON ((shop.id_sh IS NOT NULL AND shop.id_sh = goods.id_sh) OR
((shop.uuid_sh IS NOT NULL AND shop.uuid_sh = goods.uuid_sh))
LEFT JOIN suppliers
ON ((shop.id_sh IS NOT NULL AND suppliers.id_sh = shop.id_sh) OR
(shop.uuid_sh IS NOT NULL AND suppliers.uuid_sh = shop.uuid_sh))
Is it possible create this resulting table?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论