我有以下在SQL Server中执行的sql。我在tx
表中获得了行的产品。 tx
表中有6行,appt
表没有匹配的行。 master
表有一行包含个人信息,但是当我执行这个sql时,我得到36行而不是每行记录一行。我得到这个家伙的行次数。我知道我需要where
条款中的另一个条件,但我尝试过的任何工作都没有:
SELECT "tx"."today",
"tx"."ada_no",
"tx"."tth_no",
"tx"."surface",
"tx"."billed",
"tx"."ins_pays",
"tx"."ins_pays1",
"tx"."balance1",
"tx"."dr_no",
"tx"."status",
"tx"."coma",
"tx"."comb",
"tx"."notes",
"tx"."appt",
"tx"."w_date",
"tx"."thekey",
"tx"."service",
"tx"."time",
"appt"."doa",
"master"."wip",
LEFT(ampm, 1) AS premed,
"master"."med_hx",
"tx"."comc",
"tx"."comd",
"tx"."i_bal2",
"tx"."ins_pays2",
"tx"."i_bal3",
"tx"."ins_pays3"
FROM "tx"
LEFT OUTER JOIN "appt"
ON "tx"."appt_key" = "appt"."appt_key",
"master"
LEFT OUTER JOIN "tx" tx1
ON "master"."master_key" = "tx1"."master_key"
WHERE "master"."master_key" = CAST(71563.00 AS NUMERIC(10, 2))
AND "master"."master_key" = "tx"."master_key"
ORDER BY "tx"."time" ASC,
"tx"."appt" ASC
答案 0 :(得分:0)
很难说没有看到你的数据,但我猜你看到了这些结果,因为tx
正在加入。
我很难理解你究竟需要什么,但如果包含你当前的数据和你想要的输出,我们可能会指出你正确的方向。
另一方面,我认为你没有任何理由在那里加上所有那些双引号。如果你删除这些并格式化查询,那么这里的人们会更容易帮助你。
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个
FROM "tx" LEFT OUTER JOIN "appt" ON "tx"."appt_key" = "appt"."appt_key" inner join
"master"
on "master"."master_key" = CAST(71563.00 AS NUMERIC(10,2))
AND "master"."master_key" = "tx"."master_key"
LEFT OUTER JOIN "tx" tx1 ON "master"."master_key" = "tx1"."master_key"
ORDER BY "tx"."time" ASC, "tx"."appt" ASC
答案 3 :(得分:0)
不要混合旧样式和新样式JOIN。实际上,您应该完全使用逗号来避免旧式连接。它不是ANSI标准,可能导致令人困惑的代码。根据SQL,“master”作为CROSS JOIN包含在“tx”中,因为你没有任何东西将它与tx表相关联。交叉连接将导致返回的行数为每个记录的每个重复的两个部分的乘积。有效地,您当前的查询是这样的:
SELECT tx.today, tx.ada_no, tx.tth_no, tx.surface, tx.billed, tx.ins_pays, tx.ins_pays1, tx.balance1, tx.dr_no, tx.status, tx.coma, tx.comb, tx.notes, tx.appt,
tx.w_date, tx.thekey, tx.service, tx.time, appt.doa, master.wip, LEFT(ampm, 1) AS premed, master.med_hx, tx.comc, tx.comd, tx.i_bal2, tx.ins_pays2,
tx.i_bal3, tx.ins_pays3
FROM tx LEFT OUTER JOIN
appt ON tx.appt_key = appt.appt_key CROSS JOIN
master LEFT OUTER JOIN
tx AS tx1 ON master.master_key = tx1.master_key
WHERE (master.master_key = 71563.00) AND (master.master_key = tx.master_key)
ORDER BY tx.time, tx.appt
答案 4 :(得分:0)
您的部分问题是您缺少JOIN类型 - 您正在使用JOIN语法,并且您还使用逗号加入表。您的语法应如下所示:
FROM tx
LEFT OUTER JOIN appt
ON tx.appt_key = appt.appt_key
LEFT JOIN master
ON master.master_key = tx.master_key
LEFT OUTER JOIN tx tx1
ON master.master_key = tx1.master_key
所以你的完整查询将是:
SELECT tx.today
, tx.ada_no
, tx.tth_no
, tx.surface
, tx.billed
, tx.ins_pays
, tx.ins_pays1
, tx.balance1
, tx.dr_no
, tx.status
, tx.coma
, tx.comb
, tx.notes
, tx.appt
, tx.w_date
, tx.thekey
, tx.service
, tx.time
, appt.doa
, master.wip
, left(ampm,1) as premed
, master.med_hx
, tx.comc
, tx.comd
, tx.i_bal2
, tx.ins_pays2
, tx.i_bal3
, tx.ins_pays3
FROM tx
LEFT OUTER JOIN appt
ON tx.appt_key = appt.appt_key
LEFT JOIN master
ON master.master_key = tx.master_key
LEFT OUTER JOIN tx tx1
ON master.master_key = tx1.master_key
WHERE master.master_key = CAST(71563.00 AS NUMERIC(10,2))
ORDER BY tx.time ASC
, tx.appt ASC
答案 5 :(得分:0)
主词之前的逗号看起来不合适。
FROM "tx"
LEFT OUTER JOIN "appt"
ON "tx"."appt_key" = "appt"."appt_key", -- try without this comma
"master"
LEFT OUTER JOIN "tx" tx1
ON "master"."master_key" = "tx1"."master_key"