我有一张桌子A和一张桌子B A对B的主键B_ID有一个外键。 出于某种原因(我知道有合法的理由),当我将这两个表join到密钥中时,并没有使用索引。 我是否需要在A.B_ID上单独创build一个索引,或者是否需要外键的存在?
每次查询运行时,是否可以编写按照随机顺序返回表行的SQL查询?
DELETE B.* FROM m_productprice B INNER JOIN m_product C ON B.m_product_id = C.m_product_id WHERE C.upc = '7094' AND B.m_pricelist_version_id = '1000020' 我收到以下错误PostgreSQL 8.2.11 ERROR: syntax error at or near "B" LINE 1: DELETE B.* from m_productprice B INNER JOIN m_product C ON … 我试过给 DELETE B from m_productprice B INNER JOIN m_product C ON B…. […]
我有许多logging需要input到表中。 在查询中执行此操作的最佳方法是什么? 我应该做一个循环,每次迭代插入一个logging? 或者,还有更好的方法?
我有我的表“设备”中的以下数据: affiliate_name affiliate_location model ip os_type os_version cs1 inter Dell 10.125.103.25 Linux Fedora cs2 inter Dell 10.125.103.26 Linux Fedora cs3 inter Dell 10.125.103.27 NULL NULL cs4 inter Dell 10.125.103.28 NULL NULL 我执行下面的查询 SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices 它返回下面给出的结果 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL) 如何走出这个,所以它应该忽略NULL和结果应该是 cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-
试图向我的tblDomare表中添加外键时遇到问题; 我在这里做错了什么? CREATE TABLE tblDomare (PersNR VARCHAR (15) NOT NULL, fNamn VARCHAR (15) NOT NULL, eNamn VARCHAR (20) NOT NULL, Erfarenhet VARCHAR (5), PRIMARY KEY (PersNR)); INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet) Values (6811034679,'Bengt','Carlberg',10); INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet) Values (7606091347,'Josefin','Backman',4); INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet) Values (8508284163,'Johanna','Backman',1); CREATE TABLE tblBana (BanNR VARCHAR (15) NOT NULL, PRIMARY KEY (BanNR)); […]
我试图得到两天之间的总天数: 1/1/2011 3/1/2011 RETURN 62 在SQL Server中可以做到吗?
正如标题所暗示的那样…我试图用最less的开销来确定一个logging是否存在于表中。 示例查询: SELECT COUNT(*) FROM products WHERE products.id = ?; vs SELECT COUNT(products.id) FROM products WHERE products.id = ?; vs SELECT products.id FROM products WHERE products.id = ?; 说? 与'TB100'交换…第一个和第二个查询都会返回完全相同的结果(比如说对话1 )。 最后的查询将按预期的方式返回'TB100' ,或者如果表中不存在该id ,则返回任何内容。 目的是找出是否在表中的id 。 如果不是,则程序将接下来插入logging,如果是,则程序将跳过它或执行基于此问题范围之外的其他程序逻辑的UPDATE查询。 哪个更快,开销更less? (每次程序运行会重复数万次,每天运行多次)。 (通过M $提供的JDBC驱动程序从Java运行M $ SQL Server的查询)
JDBC兼容的应用程序应该在哪里存储它的SQL语句,为什么? 到目前为止,我设法确定了这些选项: 硬编码在业务对象 embedded在SQLJ子句中 封装在单独的类中,例如数据访问对象 元数据驱动(将对象模式与数据模式分离 – 描述元数据之间的映射) 外部文件(例如属性或资源文件) 存储过程 每个人有什么“优点”和“缺点”? SQL代码应该被视为“代码”还是“元数据”? 存储过程应该只用于性能优化还是数据库结构的合法抽象? 性能是决定的关键因素? 供应商locking呢? 有什么更好的 – 松耦合或紧耦合,为什么? 编辑:谢谢大家的答案 – 这里是一个总结: 元数据驱动即对象关系映射(ORM) 优点: 非常抽象的 – 数据库服务器可以切换而不需要改变模型 广泛传播 – 实际上是一个标准 切断所需的SQL数量 可以将SQL存储在资源文件中 performance(通常)是可以接受的 元数据驱动的方法 (数据库)厂商独立性 缺点: 隐藏SQL和真正的开发人员的意图 SQL很难被DBA审查/更改 SQL可能仍然需要奇数的情况 可以强制使用专有查询语言,如HQL 不适合优化(抽象) 缺乏参照完整性 替代缺乏SQL知识或在数据库中的代码缺乏谨慎 永远不要匹配本地数据库的性能(即使它接近) 模型代码与数据库模型紧密结合 硬编码/封装在DAO层 优点: SQL保存在访问数据的对象(封装) SQL很容易编写(开发速度) 当需要更改时,SQL很容易追踪到 简单的解决scheme(没有凌乱的架构) 缺点: SQL不能由DBA查看/更改 SQL很可能成为DB特定的 SQL可能变得难以维护 存储过程 […]
UPDATE dbo.TestStudents SET LASTNAME = ( CASE WHEN (LASTNAME = 'AAA') THEN 'BBB' WHEN (LASTNAME = 'CCC') THEN 'DDD' WHEN (LASTNAME = 'EEE') THEN 'FFF' ELSE (LASTNAME) END ) 该声明是为了这个目的而工作的,但其他条件扫描了表中的每个logging。 有什么办法可以让未受影响的行保持原样吗?