lushang 发布的文章

Salesforce SOQL中的Semi-Join和Anti-Join

半连接和反链接是SOQL里面一个宝,只要用的好,天天下班早

Semi-Join | 半连接

半连接(Semi-Join)指的是在SOQL语句的对比子句里面(也就是WHERE部分),使用子查询(subquery)的情况。

可能用到半连接的情况可能有:

  1. 获取某些具有特定阶段或者截至日期Opportunity的Account下面所有Contact信息
  2. 获取具有激活的Contract的Account下面所有的Opportunity信息

写法
有两种半连接:1)使用Id字段,2)使用外键(Lookup/Master-Detail关系等)

  1. 使用Id字段的半连接例子:
SELECT Id, Name 
FROM Account 
WHERE Id IN 
  ( SELECT AccountId
    FROM Opportunity
    WHERE StageName = 'Closed Lost' 
  )
  1. 使用外键的半连接例子:
SELECT Id
FROM Task 
WHERE WhoId IN 
  (
    SELECT Id
    FROM Contact
    WHERE MailingCity = 'Twin Falls'
  )

Anti-Join | 反连接

反连接(Anti-Join)与半连接非常类似,只是不同于半连接使用的比较关键字为IN, 反连接使用的比较关键字为NOT IN。其余部分包括写法、限制等是一致的,不再赘述。

两种写法

  1. 使用Id字段的半连接例子:
ELECT Id, (Select Id, Amount, CloseDate FROM Opportunities)
FROM Account
WHERE Id NOT IN
  (
    SELECT AccountId
    FROM Contact
    WHERE LastName LIKE 'Trump%'
  )
  1. 使用外键的半连接例子:
SELECT Id, Name, Phone, Email
FROM Contact
WHERE AccountId NOT IN 
  (
    SELECT AccountId
    FROM Opportunity
    WHERE CloseDate < Last_Week
  )

限制

  1. 在主语句的WHERE分句中,不能超过2INNOT IN语句
  2. 不能在半连接或者反连接前使用NOT操作符。若有这种情况,可以考虑把半连接转换为反连接,或者反连接转换为全连接
  3. 必须是Id字段或者外键,诸如... Where Account.Id IN (...)是非法的
  4. 子查询的查询字段必须与主查询对应的字段SObject一致,是且必须是对应的外键
  5. 子查询的字段条数不受限制,但是主查询条数仍收到限制
  6. 半连接或者反连接不能嵌套使用,即不能在半连接/反连接中再使用半连接或者反连接
  7. 子查询不能使用OR
  8. 子查询不支持COUNT, 'FOR UPDATE,ORDER BY,LIMIT`
  9. 下列对象不支持:
    • ActivityHistory
    • Attachments
    • Event
    • EventAttendee
    • Note
    • OpenActivity
    • Tags (AccountTag, ContactTag, and all other tag objects)
    • Task

详情可以查看SOQL and SOSL Reference以下章节:
Semi-Joins with IN and Anti-Joins with NOT IN

Content Objects Schema| 文件相关对象结构

Content Objects Schema| 文件相关对象结构

From Salesforce SOAP API Developer Guide
Content Objects.png

Remark

  1. File Data saved in ContentVersion
  2. When Create Content, you can just create ContentVersion
  3. When insert with Base64/Blob data, VersionData, 'PathOnClient(file name) are required
  4. When insert with url link, ContentUrl is required
  5. ContentDocument will be created automatically

机器学习常见算法

这篇文章是机器学习常用基本算法文章的一个索引,具体可以参见具体的文章链接
文章状态 alpha

  1. 决策树 Decision Tree
  2. 随机森林 Random Forest
  3. 逻辑回归 Logistic Regression
  4. 支持向量机 SVM
  5. 朴素贝叶斯
  6. K最近邻算法
  7. K均值算法
  8. Adaboost 算法
  9. 神经网络
  10. 马尔可夫

参考

  1. Kaggle: Learning Machine Learning
  2. CSDN: 轻松看懂机器学习十大常用算法
  3. 伯乐在线: 10 种机器学习算法的要点 (3的翻译)
  4. Essentials of Machine Learning Algorithms
  5. A Tour of The Top 10 Algorithms for Machine Learning Newbies

Train Husky 训练你的二哈

Rules | 规则

  • You are alpha dog or new pack leader for your dog | 让狗狗认识到你是「领头狗」,比他地位高
  • You have to teach him in a manner he will understand | 以狗狗理解的方式教育他
  • Word Association
    • Use the same word (command) for each behavior every time you teach it, adding food rewards and verbal praise to reinforce the positive. | 每次训练相同的行为使用相同的词语(命令),同时使用食物奖励和口头鼓励来增强训练效果。
    • The puppy will make the connection and will be motivated to repeat the behavior when he hears those key words. | 狗狗会讲命令和行为联系起来,同时会去重复行为当它们听到相同的词语(命令)
  • Timing | 时机
    • All dogs learn their lessons in the present tense. You have to catch them in the act (good or bad) in order to dispense rewards or discipline. | 所有狗狗都在当时学习,你必须抓现行,不管是为了奖励还是纪律
    • You have three to five seconds to connect with your puppy or he will not understand what he did wrong. | 你只有3-5秒时间,之后狗狗就忘了这事儿,不会明白它做错了什么
    • Use simple one-word commands and say them only once. | 命令最好,一个词,重复一次。
    • Always praise (and offer a treat ) as soon as your puppy does something good (or stops doing something naughty). | 每次狗狗做对了就要及时奖励,让它们知道自己是好狗
  • Never hit or kick your dog or strike him with a newspaper or other object. | 不要用报纸等打狗,不然它们会反社会
  • When praising or correcting, use your best doggie voice. | 鼓励或者训斥时使用不同的语气

Reference | 参考资料

  1. Siberian Husky Obedience Training
  2. 7TrainingTheSiberian