我规范化我的MySQL数据库,这使我无法获取准确的数据,实际上我需要获取有关供应商的详细信息。我有5张桌子。第一个表是"供应商"我有供应商基本信息,如姓名,电子邮件,地址如下所示:
| id | name | email | address |
|------------|------------------|----------------------------------
| 1 | Haris | Haris@gmail.com | Abcd Efgh |
|------------|------------------|----------------------------------
| 2 | John | john@gmail.com | Abcd Efgh |
|------------|------------------|----------------------------------
| 3 | Chris | chris@gmail.com | Abcd Efgh |
第二张表"材料"我有一个材料列表,其中我有两个列id和材料,如下所示:
| id | materials |
|------------|------------------|
| 1 | Iron |
|------------|------------------|
| 2 | Plastic |
|------------|------------------|
| 3 | Steel |
第三表是"类别"我在其中列出了类别ID和类别,如下所示:
| id | categories |
|------------|------------------|
| 1 | chair |
|------------|------------------|
| 2 | Table |
|------------|------------------|
| 3 | Glass |
在名为" vendors_materials"的第四个表中我有供应商ID,供应商名称和材料代码。
| id | name | material_cod |
|------------|------------------|--------------------
| 1 | Haris | 1 |
|------------|------------------|--------------------
| 1 | Haris | 2 |
|------------|------------------|--------------------
| 3 | Chris | 1 |
并在最后的第五个表中命名为" vendors_category"我有供应商ID,供应商名称和类别代码。
| id | name | category_cod |
|------------|------------------|--------------------
| 2 | John | 1 |
|------------|------------------|--------------------
| 2 | John | 2 |
|------------|------------------|--------------------
| 1 | Haris | 1 |
我想了解供应商的详细信息以及如下所示的材料和类别:
| id | name | email | address | material | category |
|-----|----------|-------------------|-----------------------------------------
| 1 | Haris | Haris@gmail.com | Abcd Efgh | Iron plastic| Chair
|-----|------------------|-----------------------------------------------------|
| 2 | John | john@gmail.com | Abcd Efgh | | Chair table
|-----|------------------|-----------------------------------------------------|
| 3 | Chris | chris@gmail.com | Abcd Efgh | Iron | |
我已经做了很多努力来实现我的成绩但却失败了。
答案 0 :(得分:0)
尝试以下查询:
实际上你需要学习在SQL中使用JOIN。如果你学到了这个东西,那么你就会很难做出难以理解的问题。
作为参考,您可以继续:SQL Joins
SELECT vendor.name,
vendor.email,
vendor.address,
materials.materials,
categories.categories
FROM vendor
JOIN materials
JOIN categories
JOIN vendors_materials
JOIN vendors_category ON materials.id = materials.material_cod
AND categories.id = vendors_category.material
AND materials.id = vendor.id
AND vendor.id = categories.id
GROUP BY name;
答案 1 :(得分:0)
SELECT
vendor.name,
vendor.email,
vendor.address,
materials.materials AS material,
categories.categories AS category
FROM vendor
INNER JOIN vendors_materials ON vendor.name = vendors_category.name
INNER JOIN categories ON vendors_category.category_cod = categories.id
INNER JOIN vendors_materials ON vendors_materials.name = vendor.name
INNER JOIN materials ON materials.id = vendors_materials.material_code
它也没有很好的规范化数据库结构,首先,当你可以用int连接时,不建议连接具有varchar列的表。例如,当vendors_materials
连接时,您的“连接器”表格vendors_category
和vendor
与name
vendor.id
连接。所以你的vendors_materials
表应该是这样的:
| id | vendor_id | material_cod |
|------------|------------------|--------------------
| 1 | 1 | 1 |
|------------|------------------|--------------------
| 1 | 1 | 2 |
|------------|------------------|--------------------
| 3 | 3 | 1 |
如果是vendors_category
,您也可以这样做。