我有三个相关的表"A(id,val)","B(id,val)",以及一个值为"AB(aid,bid,val)"的链接表
我正在查询B以带回A值,例如:
SELECT A.*
FROM A INNER JOIN AB ON A.id = AB.aid INNER JOIN B ON AB.bid = B.id
WHERE B.val = 'foo';
Run Code Online (Sandbox Code Playgroud)
每个A有很多B,每个B都有很多A.
我正在崩溃的问题是需要过滤集合,以便只有当AB.val是任何给定A/B对的最大值时,查询才会返回行
例如,如果我有数据:
id val
1 something
2 somethingelse
Run Code Online (Sandbox Code Playgroud)
id val
1 foo
2 bar
Run Code Online (Sandbox Code Playgroud)
aid bid val
1 1 3
1 2 2
2 1 1
2 2 4
Run Code Online (Sandbox Code Playgroud)
我想只选择AB的第一行和最后一行,因为它们是每个A的最大值,然后能够查询B.val ='foo'以仅返回第一行.我不知道如何仅限制AB表中的max val行.
我能得到的最好的是
SELECT *
FROM A
INNER JOIN
(SELECT aid, bid, MAX(val) AS val FROM AB GROUP BY aid) as AB …Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么使用以下脚本创建 PostgreSQL 表:
CREATE TABLE users
(
"id" serial NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY ("id")
)
Run Code Online (Sandbox Code Playgroud)
pg_dump以以下格式转储:
CREATE TABLE users(
"id" integer NOT NULL,
"name" character varying(150) NOT NULL,
"surname" character varying (250) NOT NULL,
"dept_id" integer NOT NULL
);
ALTER TABLE users OWNER TO postgres;
CREATE SEQUENCE "users_id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE …Run Code Online (Sandbox Code Playgroud) 你是否有人知道一个帮助你构建/操作SQL查询的库,它支持JOIN?
如果你有一些可以返回一个对象的东西,它有一些查询集,并且仍然能够将JOIN应用于它,子查询等,那么它会提供很大的灵活性.
我一直在搜索,并且只找到了SQL Builder,它看起来非常基本,并且不支持连接.这将是一个真正使其有用的主要功能.
我有一个应用程序,我想通过另一个模型(即Task1> Relationship <Task2)将模型的实例链接到同一模型的另一个实例,我想知道我是否可以使用has_many:through.
基本上,关系模型将具有额外信息(type_of_relationship,lag),因此将其作为连接模型是理想的.但是,没有两个模型可以加入,只有一个......自己.has_many:还能继续吗?如果是这样,联接表将如何显示?使用Rails约定,您将有两个名为Activity_id的列,这显然不适用于数据库.
或者,我可以使用has_many_and_belongs_to在任务模型和关系模型之间设置多个但我不确定这是否准确地描述了一个只能在任何一个关系模型中链接两个任务模型的关系(当然,当然任务可能属于多个关系,因此可能属于多个关系.
我的直觉说要使用has_many_and_belongs_to并对模型中的规则进行排序,但是有更好的方法吗?我正绕着这一圈转圈!
任何帮助赞赏.
我在MSDN和Google上做了很多搜索,但看起来IGNORE_DUP_KEY选项的描述非常有限.
我的困惑,
IGNORE_DUP_KEY选项是列的选项吗?一张桌子?几列?索引(使索引唯一)?
如果将IGNORE_DUP_KEY设置为Yes,则在插入一批具有重复键的记录(使用批量插入WriteToServer ADO.Net函数)时(例如,我插入一些已存在于数据库中的值),SQL Server不会抛出错误.批处理作业将成功完成,但不会插入重复的行.将插入所有其他行,SQL Server将其视为作业成功.我的理解是否正确?
乔治,提前谢谢
我有以下Sql查询返回我想要的结果类型:
SELECT b.ID, a.Name, b.Col2, b.COl3
FROM Table1 a
LEFT OUTER JOIN Table2 b on b.Col4 = a.ID AND b.Col5 = 'test'
Run Code Online (Sandbox Code Playgroud)
实质上,如果表2中没有条件'test',那么我希望列出等于Table1(a)的行,同时列出表2(b)中的数据或NULL.
我对LLBLGen比较陌生,并尝试过一些东西而且没有用.如果条件存在,我可以让它工作; 但是,当需求发生变化并导致我将查询重写为上述内容时,我感到很茫然.
以下是适用于现有产品的旧LLBLGen C#代码,但不适用于上述查询:
LookupTable2Collection table2col = new LookupTable2Collection();
RelationCollection relationships = new RelationCollection();
relationships.Add(LookupTable2Entity.Relations.LookupTable1EntityUsingTable1ID, JoinHint.Left);
IPredicateExpression filter = new PredicateExpression();
filter.Add(new FieldCompareValuePredicate(LookupTable2Fields.Col5, ComparisonOperator.Equal, "test"));
table2col.GetMulti(filter, relationships);
Run Code Online (Sandbox Code Playgroud)
表1中有3条记录.即使表2中的所有项都为NULL,我也需要返回3条记录,因为条件不存在.有任何想法吗?
我还可以做些什么来优化此查询?
SELECT * FROM
(SELECT `item`.itemID, COUNT(`votes`.itemID) AS `votes`,
`item`.title, `item`.itemTypeID, `item`.
submitDate, `item`.deleted, `item`.ItemCat,
`item`.counter, `item`.userID, `users`.name,
TIMESTAMPDIFF(minute,`submitDate`,NOW()) AS 'timeMin' ,
`myItems`.userID as userIDFav, `myItems`.deleted as myDeleted
FROM (votes `votes` RIGHT OUTER JOIN item `item`
ON (`votes`.itemID = `item`.itemID))
INNER JOIN
users `users`
ON (`users`.userID = `item`.userID)
LEFT OUTER JOIN
myItems `myItems`
ON (`myItems`.itemID = `item`.itemID)
WHERE (`item`.deleted = 0)
GROUP BY `item`.itemID,
`votes`.itemID,
`item`.title,
`item`.itemTypeID,
`item`.submitDate,
`item`.deleted,
`item`.ItemCat,
`item`.counter,
`item`.userID,
`users`.name,
`myItems`.deleted,
`myItems`.userID
ORDER BY `item`.itemID DESC) as …Run Code Online (Sandbox Code Playgroud) 我们的所有报告服务生产实例都分为Web服务器组件和报告数据库组件.
我知道您可以通过以下TSQL检测数据库服务器上的SQL Server实例:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'),
SERVERPROPERTY ('edition')
Run Code Online (Sandbox Code Playgroud)
但是,在我们的示例中,报告服务器没有安装数据库服务器组件.那么在这种情况下如何检测安装了哪些Service Pack?
我正在尝试实现搜索,您可以在其中输入多个搜索项以形成AND条件.它还应搜索数据库的不同字段.
例如:
当你输入"比尔西雅图"时,你应该得到一个记录,其中NAME匹配比尔和CITY匹配西雅图.你不会得到任何只有CITY匹配西雅图的行.
现在,这听起来并不复杂,但它似乎比我想象的要难.我想出了这样的事情:
SELECT * FROM ADDRESS WHERE
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%'))
AND
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%'))
Run Code Online (Sandbox Code Playgroud)
这适用于我们之前的情况,但假设我们添加另一个字段:
SELECT * FROM ADDRESS WHERE
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%'))
AND
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%'))
AND
((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%'))
Run Code Online (Sandbox Code Playgroud)
现在它不会返回所需的结果.我本质上需要(我猜)是一种确定是否像子条件一样的方法
((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%'))
Run Code Online (Sandbox Code Playgroud)
返回一些东西,如果没有,我需要忽略那个条件.
顺便说一下,我正在使用MSSQL '05.
我正在用MS Visual C++ 6.0编写一个程序(是的,我知道它很古老,没有什么我可以做的升级).我看到一些我认为非常奇怪的行为.我有一个类,有两个构造函数定义如下:
class MyClass
{
public:
explicit MyClass(bool bAbsolute = true, bool bLocation = false) : m_bAbsolute(bAbsolute), m_bLocation(bLocation) { ; }
MyClass(const RWCString& strPath, bool bLocation = false);
private:
bool m_bAbsolute;
bool m_bLocation;
};
Run Code Online (Sandbox Code Playgroud)
当我使用以下语法实例化此类的实例时:MyClass("blah")它调用第一个构造函数.正如你所看到的,我添加了explicit关键字,希望它不会那样做......没有骰子.这样看来,从喜欢转换const char *到bool通过转换RWCString,其中有一个拷贝构造函数,这需要const char *.为什么这样做?我认为如果有两个可能的选择,就会说这是不明确的.我该怎么做才能阻止它这样做?如果可能的话,我想避免必须明确地将strPath参数转换为a RWCString,因为它将与文字一起使用很多,并且这是一个额外的输入(加上一个非常容易犯的错误).
sql ×4
sql-server ×4
inner-join ×2
join ×2
left-join ×2
activerecord ×1
ado.net ×1
arguments ×1
builder ×1
c# ×1
c++ ×1
constructor ×1
llblgenpro ×1
many-to-many ×1
mysql ×1
optimization ×1
pg-dump ×1
php ×1
postgresql ×1
servicepacks ×1
sqlbuilder ×1
subquery ×1
unique ×1
visual-c++-6 ×1