社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MatBailie  »  全部回复
回复总数  3
2 年前
回复了 MatBailie 创建的主题 » MySQL连接两个表,给出表1的所有条目[重复]

这个 WHERE 第条适用 之后 这个 JOIN .

为了满足您的需要,您也需要过滤userlocation映射 之前 在期间 加入。要么在联接谓词中包含用户筛选器,要么在筛选用户的子查询中联接 (前者是通常的、更干净的方法) .

     FROM tbl_location
LEFT JOIN tbl_userlocation
       ON tbl_userlocation.fk_location = tbl_location.id 
      AND tbl_userlocation.fk_user     = :id

     FROM tbl_location
LEFT JOIN (SELECT * FROM tbl_userlocation WHERE fk_user = :id) AS tbl_userlocation 
       ON tbl_userlocation.fk_location = tbl_location.id
5 年前
回复了 MatBailie 创建的主题 » JSON字段类型的MySQL连接查询

我想你想要这样的东西。。。

SELECT
  c.id,
  COUNT(p.id)
FROM
  categories        c
LEFT JOIN
  client_profiles   p
    ON  JSON_CONTAINS(p.areas,      '1',                    '$')
    AND JSON_CONTAINS(p.categories, CAST(c.id AS CHAR(32)), '$')
GROUP BY
  c.id
11 年前
回复了 MatBailie 创建的主题 » 为什么mysql中不允许在group by中使用别名?[复制品]

你不能,不能直接。

但是,如果将整个查询包装在子查询中,则它可以正常工作。

SELECT
  *
FROM
(
  SELECT
    Trade.TradeId, 
    Isnull(Securities.SecurityType,'Other') SecurityType, 
    TableName,
    CASE 
      WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId
                                                ELSE Trade.SecurityId
    END AS PricingSecurityID,
    sum(Trade.Quantity)OVER(Partition by Securities.SecurityType,
    SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity,
    --added porfolio id for Getsumofqantity
    Trade.PortfolioId,
    Trade.Price,
    case
      when (Buy = 1 and Long = 1) then 1
      when (Buy = 0 and Long = 0) then 1
                                  else 0
    end Position
  from
    Fireball_Reporting..Trade
  where
    porfolioid = 5
)
  AS data
WHERE
  Position = 1   

这意味着你不需要重复 CASE 语句在 WHERE 条款。(可维护且干燥)。

它也是一种结构,允许乐观者表现 犹如 只是重复你自己 哪里 条款。

它对其他RDBMS也是非常便携的。


在SQL Server中,您还有另一个选项…

SELECT
  Trade.TradeId, 
  Isnull(Securities.SecurityType,'Other') SecurityType, 
  TableName,
  CASE 
    WHEN SecurityTrade.SecurityId IS NOT NULL THEN SecurityTrade.SecurityId
                                              ELSE Trade.SecurityId
  END AS PricingSecurityID,
  sum(Trade.Quantity)OVER(Partition by Securities.SecurityType,
  SecurityTrade.SecurityId,Trade.Price, Buy,Long ) as sumQuantity,
  --added porfolio id for Getsumofqantity
  Trade.PortfolioId,
  Trade.Price,
  position.val AS Position
from
  Fireball_Reporting..Trade
CROSS APPLY
(
  SELECT
    case
      when (Buy = 1 and Long = 1) then 1
      when (Buy = 0 and Long = 0) then 1
                                  else 0
    end AS val
)
  AS position
where
  porfolioid = 5
  AND position.val = 1