从使用ID或UUID的三个表创建结果表

发布于 2025-01-21 12:09:41 字数 3466 浏览 0 评论 0原文

我有一个数据库 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文