多个ON WHERE SQL,无法使其工作

时间:2018-04-20 09:17:35

标签: mysql sql

我正在尝试找出一种只显示基于DPA.value的联系人详细信息的方法,因此可以根据DPA值从输出列表中排除联系人,如果dpa值等于5,则排除联系人。排除电子邮件地址if DPA值= 3或4.如果值= 2或4

,则排除电话

如果DB.OrganisationPersonnel.EmployedToDate为空,则排除联系人     这段代码似乎没有用,任何帮助都会非常感激。

case class Book(isbn: String)

val b = Book("123")

b.toString // "Book(123)"



trait CaseClassParser[A] {
 val prefix = A.getClass.getName // Not work
 def read(str: String): A = {
  Parser.parse....
 }
}

我尝试添加其他ON WHERE,但无法解决如何没有错误。任何帮助都会非常感激,因为我对SQL很新。

4 个答案:

答案 0 :(得分:0)

首先,您的FROM子句中不需要任何括号。只需删除它们。数据库引擎查询优化器将以最佳顺序为您进行连接。

接下来,您在ON上下文中遇到语法错误。您应该使用AND表达式组合多个匹配项,因为它只是一个布尔表达式。而不是写

ON
   DB.Person.TitleID = DB.Title.ID) 
ON
   DB.OrganisationPersonnel.PersonnelID = DB.Person.ID) 

写下

ON DB.Person.TitleID = DB.Title.ID
   AND DB.OrganisationPersonnel.PersonnelID = DB.Person.ID

答案 1 :(得分:0)

你的联接很好(虽然大多数人更喜欢语法变化,其中JOIN直接跟随ON)。但是你应该开始使用别名来简化写作&阅读源代码:

SELECT
    op.OrganisationID
  , t.Name
  , p.FirstName
...
FROM
   (((DB.OrganisationPersonnel AS op
INNER JOIN
   (DB.Person AS p
INNER JOIN
   DB.Title AS t
ON
   p.TitleID = t.ID) 
ON
   op.PersonnelID = p.ID) 
...

IF使用CASE在标准SQL中实现:

SELECT
    op.OrganisationID
  , CASE WHEN ProductPAID <> 5 THEN op.PersonnelID END AS PersonnelID
  , DB.Title.Name
... 
  , CASE WHEN ProductPAID <3 THEN p.Number END AS PhoneNumber
  , CASE WHEN ProductPAID IN (2, 5) THEN e.Email END AS email

这将为非匹配数据返回NULL,但是可选ELSE以默认值覆盖它。

答案 2 :(得分:0)

您可以编写简单查询,但是很喜欢这个

File.WriteAllText(filePath + ".csv", strbr.ToString(), Encoding.UTF8);

并且您必须按示例

编写联接

答案 3 :(得分:0)

尝试以下查询。

declarations: []