我需要两个表,一个使用三个表显示一对多关系,另一个表显示多对多关系。我设法做了前两个是一个只涉及一个表的查询,一个涉及两个表的一个到多个。
一个表查询:
#! /bin/bash
BIGDATA=bigdata/*
SMALLDATA=smalldata
for entry in $BIGDATA
do
filename=`basename $entry`
newname=$(echo $filename | awk -F '-' '{print $1 "-" $2 "-10KB.txt"}')
head -c 1 $entry > $SMALLDATA/$newname
done
涉及2个表格的一对多:
SELECT LastName, FirstName, City
FROM Customer
WHERE City = 'Lutherville-Timonium'
这是我的代码:
SELECT b.BrandName, m.ModelName
FROM Brand b, Model m
WHERE b.BrandID = m.BrandID
非常感谢任何帮助 感谢。
答案 0 :(得分:2)
这应该做的工作:
SELECT *
FROM computer c
LEFT OUTER JOIN model m ON m.ModelName = c.ModelName
LEFT OUTER JOIN brand b ON b.BrandID = m.BrandID
您可能希望根据您的要求更改返回的字段。祝这个项目好运。
===更新 - 按照您的要求订购:
SELECT *
FROM brand b
LEFT OUTER JOIN model m ON m.BrandID = b.BrandID
LEFT OUTER JOIN computer c ON c.ModelName = m.ModelName
===更新2号 - 包括新的'平台'表
SELECT *
FROM brand b
LEFT OUTER JOIN model m ON m.BrandID = b.BrandID
LEFT OUTER JOIN computer c ON c.ModelName = m.ModelName
LEFT OUTER JOIN platform p ON p.platformID = c.PlatformID
===更新3号 - 以上涵盖了2,3和4个表的1-many关系。要添加多对多关系,您可能希望查看计算机与发票的关系,因为计算机可以在多个发票中,而发票可以(在现实生活中)包含多台计算机。最初提出的数据结构并不允许这样做。为 InvoiceItem 添加表将实现此目的。
计算机和发票之间的关系可能是多对多的[计算机(很多) - (很多)发票]这是通过在它们之间添加链接表来实现的:
Computer (1)-(Many) InvoiceItem (many)-(1) Invoice
===更新4号 要实现此目的,请从发票表中删除computerID,并使用以下字段添加新表InvoiceItem - InvoiceItemID,InvoiceNumber,ComputerID。然后从数据库中检索发票项的查询将是:
SELECT *
FROM Invoice i
LEFT OUTER JOIN InvoiceItem ii ON ii.InvoiceNumber = i.InvoiceNumber
LEFT OUTER JOIN Computer c ON c.computerID = ii.computerID
您可以将此扩展为包括其他与计算机相关的表格:
SELECT *
FROM Invoice i
LEFT OUTER JOIN InvoiceItem ii ON ii.InvoiceNumber = i.InvoiceNumber
LEFT OUTER JOIN Computer c ON c.computerID = ii.computerID
LEFT OUTER JOIN Model m ON m.ModelName = c.ModelName
LEFT OUTER JOIN Brand b ON b.BrandID = m.BrandID
LEFT OUTER JOIN platform p ON p.platformID = c.PlatformID
如果我真的很挑剔,我会抛弃名称上的链接,如果模型名称略有变化,只需使用ID,查询将不再起作用。使用纯粹的ID可以防止这种情况。